Python Scapy模块报错19:即使是合法端口也没有设备
非常抱歉,尽管我已经在网上搜索并查看了StackOverflow的资料,但即使尝试了一些解决办法,我还是遇到了同样的问题。
我有一个Ubuntu主机。在这个主机上,我运行我的Python脚本。这个脚本的一部分是登录到另一个远程的Ubuntu主机(上面运行着scapy 2.2.0),然后执行我的scapy函数,生成一个在特定端口上的单播数据包。
这是我的scapy函数:
def send_scapy(self,port='vintf10',num_frames=10,scale_macs=0):
'''
Generates L2 frames(incl Payload) with both Src & Dest MAC == Unicast
num_frames for each SRC-MAC is sent out. Returns a list of SRC_MAC generated for further verifying in Flow & L2 Tables of VEM
'''
src_mac_list = []
for i in range(num_frames):
oui = [ 0x00, 0x11, 0x22,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff) ]
src_mac = ':'.join(map(lambda x: "%02x" % x, oui))
src_mac_list.append(src_mac)
try:
payload = 'REMOTE REMOTE REMOTE REMOTE REMOTE'
brcd_log.info ("Payload of the to-be-generated frames = \n%s" % payload)
brcd_log.info (" SRC MAC LIST == %s" % src_mac_list)
for i in range(len(src_mac_list)):
print "MAC == %s" % src_mac_list[i]
#sendp(Ether(dst='00:16:17:18:19:20',src=src_mac_list[i])/IP()/payload,iface=port,count = 1)
pkt = Ether(dst='00:16:17:18:19:20',src=src_mac_list[i])/IP()
print "PKT == %s" % pkt
sendp(pkt,iface=port,count = 1)
brcd_log.info ("Sent Out of Port %s ,1 frame with Unicast Src MAC %s and Unicast Dest MAC 00:16:17:18:19:20" %(port,src_mac_list[i]))
when I run on calling this function as below, the following error comes:
self.remote_kvm = Kvm_Infra(self.vem_2_ip,self.vem2_uname,self.vem2_pwd)
self.remote_kvm.send_scapy() ##
Error:
root@com-node12-36:/home/localadmin# 2014-04-07 22:47:57,520 [INFO] brcd_os - Payload of the to-be-generated frames =
REMOTE REMOTE REMOTE REMOTE REMOTE
2014-04-07 22:47:57,524 [INFO] brcd_os - SRC MAC LIST == ['00:11:22:23:bb:88', '00:11:22:5a:e6:b8', '00:11:22:13:70:39', '00:11:22:42:b6:11', '00:11:22:16:a4:ff', '00:11:22:1c:23:88', '00:11:22:3a:3b:b6', '00:11:22:3e:dd:f0', '00:11:22:03:5b:72', '00:11:22:7b:16:d7']
MAC == 00:11:22:23:bb:88
PKT == "#»E@
2014-04-07 22:47:57,531 [INFO] brcd_os - Exception Type = <class 'socket.error'>, Exception Object = [Errno 19] No such device
<<<<<<<<<<<
我到底漏掉了什么呢?
当我在本地主机(也就是运行Python脚本的那台机器)调用同样的函数时,它能正常工作。而且在远程主机上,当我手动尝试同样的步骤(也就是函数为同一个有效端口所做的事情)时,它也能正常工作。
1 个回答
0
我觉得问题可能出在与远程主机通信时,传输的值被转换成了unicode
格式。比如说,如果用json
格式来传输IP地址,那么虽然打印出来的值看起来没什么特别的,甚至和预期的str
值比较时一切都正常,但实际上底层的系统可能对unicode
的处理不太好。你可以试着打印一下所有传输值的类型,然后把它们再转换回str
格式。