我正在尝试解压缩从数据包中动态接收的数据,主要原因是我不知道ip地址的长度或数据包中的ip地址数量,所以需要解压缩所有
if our_or_addr_len == 4:
our_op_ip = struct.unpack(">BBBB", payload[6:10])
num_their_ips = struct.unpack(">B", payload[10])[0]
len_their_ips = struct.unpack(">B", payload[12])[0]
# Much better way to unpack the packet, does unpacking dynamically rather than set values
byte_string = '>{}'.format('b'*len_their_ips)
their_ips = []
for count in range(num_their_ips):
start = 13 + (count*len_their_ips)
end = start + len_their_ips
ip = struct.unpack(byte_string, payload[start:end])
print 'IP #{}: {}'.format(count+1, ip)
their_ips.append(ip)
return { 'tm': tm, 'our_or_ip_version': our_or_ip_version, 'our_or_addr_len': our_or_addr_len, 'our_op_ip': our_op_ip, 'num_their_ips': num_their_ips, 'len_their_ips': len_their_ips, 'their_ips': their_ips }
上面是我的代码
它应该做的是,如果我的IP地址是ip v4 for,则为他们所有的ip地址解压缩它们从有效负载中的13开始的数据包,其IP地址的长度为包含的IP地址
目前它只输出一个IP地址,尽管有效载荷中有2个IP地址
显示在此输出中
{'our_or_addr_len': 4, 'len_their_ips': 4, 'our_op_ip': (00, 00, 00, 00), 'their_ips': [(0, 00, 00, 0)], 'tm': 1402265584, 'our_or_ip_version': 4, 'num_their_ips': 2}
我如何才能获得返回的两个ip地址,循环是否存在问题,因为我觉得它应该有效,所以很困惑为什么只返回一个ip
答案 0 :(得分:-1)
管理修复它似乎我的缩进是在their_ips.append(ip)
,所以它没有被正确分配,奇怪我怎么没有错误然而在complie,谁有一个很好的IDE程序的Linux和python?< / p>