我需要有几天做了一个项目,它的一个基本的客户端和服务器的接口。 美中不足的是,它需要所有的原始套接字。 我有创造,我只是停留在发送数据包没有问题。
首先,我试图将其绑定到接口“EN1”,但它不断给我一个错误nodename not known
。 当我把它绑定到我的本地IP地址,它工作正常。 完成此之后,我创建了一个原始数据包类,其所有的十六进制。 然后我做了一个sendto调用发送它上线。
的问题是,当我使用的Wireshark捕获分组它显示为是IPv4分组的有效载荷。 我不希望它自动地使头,这是我的原始数据包类是反正。 你知道有什么方法我可以把这些标题?
这里是我的代码 - 唯一的原始功能:
def raw():
HOST = gethostbyname('192.168.1.10')
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)
s.bind((HOST, 0))
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 0) #no headers - it wont work!!
pckt = packet("\x68\x65\x6c\x6c\x6f")
netpacket = pckt.getpacket()
print "Sending.. "
print ""
s.sendto(netpacket, ('192.168.1.1', 80))
data = s.recv(4096)
print data
O和这里是在最后一个hello捕获的数据包:
007f 2809 6da2 28cf daee 2156 0800 4500 004d 1bfc 0000 4000 db59 c0a8 010a c0a8 0101* 007f
2809 6da2 28cf daee 2156 0800 4500 0036 2352 4000 4006 0000 c0a8 010a c0a8 0101 15c0 0050
0000 0000 0000 0000 8010 813b 0000 68656c6c6f -hello
*这是负载起始,即使它被认为是包还我不打算使用任何其他模块我必须使用插座的开始。