Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 肩胛骨粗窝_Python_Tcp_Scapy - Fatal编程技术网

Python 肩胛骨粗窝

Python 肩胛骨粗窝,python,tcp,scapy,Python,Tcp,Scapy,我尝试用Python中的原始套接字并使用Scapy实现3-way-hadnshake 代码是: s=socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.IPPROTO_TCP) ss=StreamSocket(s) iph=IPheader() syn = TCP(sport=TCP_SOURCE_PORT,dport=TCP_DESTINATION_PORT, flags="S") synack = ss.sr1(iph/syn) m

我尝试用Python中的原始套接字并使用Scapy实现3-way-hadnshake

代码是:

s=socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.IPPROTO_TCP)
ss=StreamSocket(s)
iph=IPheader()
syn = TCP(sport=TCP_SOURCE_PORT,dport=TCP_DESTINATION_PORT, flags="S")
synack = ss.sr1(iph/syn)
myack = iph/TCP(dport=synack[TCP].sport, sport=synack[TCP].dport, seq=synack[TCP].ack, ack=synack[TCP].seq+1, flags="A")
ss.send(myack)
方法返回一个scapy IP头

运行脚本时,我遇到以下错误:

ERROR: --- Error in child 3057
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 89, in sndrcv
pks.send(p)
File "/usr/lib/python2.7/dist-packages/scapy/supersocket.py", line 34, in send
return self.outs.send(sx)
error: [Errno 6] No such device or address

我发现您的代码可能存在两个问题:

  • 在调用
    StreamSocket()
    之前,需要与常规套接字建立连接。因此,您需要在
    ss=StreamSocket(s)
    行之前建立一个连接,类似于
    s.connect(((“10.1.1.1”,9000))
    。可以找到更多信息

  • 您可能需要更正基本插座类型。我建议使用类似于
    s=socket.socket(socket.AF\u INET,socket.SOCK\u RAW,socket.IPPROTO\u TCP)
    。有关更多信息,请查阅


设备没有响应您的SYN数据包,因为原始套接字没有响应。您必须手动发送SYN-ACK。此外,Wireshark和TCP将序列号显示为相对序列号。要显示实际数字,必须关闭此选项。第三,您可以手动设置序列号或使用

TCP(sport = port1, dport = port2, flags="A", seq = random.getrandbits(32), ack = MY_ACK)


做出了改变并开始工作。现在我尝试通过StreamSocket发送SYN数据包,但我在Wireshark上看到它的格式不正确
iph=IPheader()syn=TCP(sport=TCP\u SOURCE\u PORT,dport=TCP\u DESTINATION\u PORT,seq=100,ack=400,flags=“S”)pkt=iph/syn ss.send(pkt)
I通过只使用套接字而不使用IP头发送TCP头解决了上述问题。下一个问题是,我的设备没有响应我的SYN数据包。我不能设置我想要的序列号,SYN数据包是用Seq=0发送的,但我认为这不是问题所在
TCP(sport = port1, dport = port2, flags="A", seq = 01395, ack = MY_ACK)