Scapy原始插座

2024-09-30 14:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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头。在

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

^{pr2}$

Tags: portsocketssseqwayscapytcpflags
2条回答

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

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

或者

^{pr2}$

我发现你的代码可能有几个问题:

  • 在调用StreamSocket()之前,您需要与常规套接字建立连接。所以您需要建立一个连接,类似于s.connect(("10.1.1.1",9000))ss=StreamSocket(s)行之前。更多信息请参见here

  • 您可能需要更正基本套接字类型。我建议用s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)。有关详细信息,请查看this

相关问题 更多 >