题
我尝试使用 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)
IPheader() 方法返回 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
其他提示
设备未响应您的SYN数据包,因为原始套接字不这样做。您必须手动发送SYN-ACK。此外,Wireshark和TCP显示为相对的序列号。为了显示您必须关闭此选项的实际数字。第三,您可以手动设置序列号或使用
随机化它TCP(sport = port1, dport = port2, flags="A", seq = random.getrandbits(32), ack = MY_ACK)
.
或
TCP(sport = port1, dport = port2, flags="A", seq = 01395, ack = MY_ACK)
. 不隶属于 StackOverflow