请任何人帮助解决以下问题:
def __init__(self,source, dest):
self.source = socket.inet_aton(source)
self.dest = socket.inet_aton(dest)
self.sport = 68
self.dport = 67
self.length = 0
self.udpchecksum = 0
self.data = ''
def UDP(self):
udp_hdr = struct.pack('!HHHH', self.sport,
self.dport,
self.length,
self.udpchecksum)
#Pseudo header
psip = self.source
pdip = self.dest
reserved = 0
proto = socket.IPPROTO_UDP
tlen = len(udp_hdr) + len(self.data)
pshdr = struct.pack('!4s4sBBH',
psip,
pdip,
reserved,
proto,
tlen)
pshdr = pshdr + udp_hdr+ self.data
udp_checksum = checksum(pshdr)
udp_hdr = struct.pack('!HHH',
self.sport,
self.dport,
tlen)
udp_checksum = struct.pack('H', udp_checksum)
udp_hdr = udp_hdr + udp_checksum + self.data
return udp_hdr
def checksum(data):
s = 0
n = len(data) % 2
for i in range(0, len(data)-n, 2):
s+= ord(data[i]) + (ord(data[i+1]) << 8)
if n:
s+= ord(data[i+1])
while (s >> 16):
s = (s & 0xFFFF) + (s >> 16)
s = ~s & 0xffff
return s
当我使用原始套接字发送数据包时,wireshark上出现错误:
错误的UDP长度
问题是: 使用原始套接字生成UDP包是否合适?在
目前没有回答
相关问题 更多 >
编程相关推荐