我正在尝试使用Python / Scapy / Socket(Linux env)做一件很奇怪的事情。我想管理三向握手,然后回到通常的“套接字”管理。
这是我所做的:
import socket
from scapy.all import *
pkt = IP(src='192.168.1.2',dst='192.168.1.1')/TCP(sport=12345,dport=44144,flags='S',seq=1000)
SYN = bytes(pkt)
outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
outs.connect(('192.168.1.1',44144))
outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
outs.sendto(SYN, ('192.168.1.1', 0))
raw_buffer = outs.recv(4096)
buffer = IP(raw_buffer)
my_ack = buffer.seq + 1
pkt=IP(src='192.168.1.2',dst='192.168.1.1')/TCP(sport=12345, dport=44144, flags='A', seq=1001, ack=my_ack)
ACK=bytes(pkt)
outs.sendto(ACK, ('192.168.1.1', 0))
到目前为止,连接已建立。然后,我尝试通过通常的“发送”方法使用套接字和创建的连接:
outs.send(bytes('AAA','utf8'))
这时我得到一个错误:
*** OSError: [Errno 22] Invalid argument
所以,我要尝试的是从RAW_SOCKET切换回系统处理的那个。在某些方面可能吗?
谢谢