试图动态解包数据 - python

时间:2014-06-08 22:21:37

标签: python

我正在尝试解压缩从数据包中动态接收的数据,主要原因是我不知道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

1 个答案:

答案 0 :(得分:-1)

管理修复它似乎我的缩进是在their_ips.append(ip),所以它没有被正确分配,奇怪我怎么没有错误然而在complie,谁有一个很好的IDE程序的Linux和python?< / p>