我试图为UDP数据包创建一个原始套接字,仅用于使用转发表进行IP转发。我不是原始套接字编程方面的专家,我关心的是如何确保缓冲区中有完整的UDP数据包。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 1337))
while True:
packet = s.recvfrom(65535) #how to know that I read the complete packet not 50% or 1 and half packet
forwared_packet_function(packet) #here I will parse the packet change ip header and update the IP table and forward the packet能告诉我如何用recvfrom()阅读一整包吗?
发布于 2018-05-05 14:56:04
我也不是原始套接字编程的专家,但我对网络有一定的了解。
第一题:
怎样才能知道我读的整包不是50%还是1/5包?
答:你不能。它没有像TCP那样的“序列号”或“确认号”。
第二个问题:
能否告诉我如何通过recvfrom()读取一个完整的数据包?
答:试试看
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 1337))
while True:
packet = s.recvfrom(65535).decode() #decode packet
forwared_packet_function(packet)
print(packet) #print packet to readhttps://stackoverflow.com/questions/50189727
复制相似问题