我在编写原始套接字时遇到了很多麻烦。 虽然我的实现到现在还很大,但我认为解决以下代码的问题,也可以解决我的整个实现:
from scapy.all import *
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
src_port = 12345 # any random port > 1024 i guess ...
dst_port = 80 # should be tcp, as http runs over it in the end
dst_addr = socket.gethostbyname("www.google.de")
# ensuring that kernel will not create its own ip header
sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, True)
# create a packet to send using scapy
packet = IP(dst = dst_addr)/TCP(dport = dst_port)
sock.sendto(bytes(packet), (dst_addr, 80))
我收到以下错误:
OS error: [Errno 22] Invalid argument
由以下人员提出:
sock.sendto(bytes(packet), (dst_addr, 80))
有人有线索,为什么这不起作用?
- 编辑 -
我正在研究MacOSX。 我已经注意到了这个问题:Raw sockets and sendto in python 但是,我希望有人有答案,因为旧问题缺乏一个好的答案,而且也是4岁左右。