代码之家  ›  专栏  ›  技术社区  ›  liv2hak

使用python进行IP地址转换

  •  1
  • liv2hak  · 技术社区  · 14 年前

    我要将从十进制格式(192.168.65.72)的文件中读取的IP地址转换为二进制格式1100000110100000010000010001000。我正在从文件中读取十进制格式的IP地址。请在下面查找代码段。

    /*contains 192.168.65.72*/
    filter = open("filter.txt", "r")
    
    for line in filter:
        bytePattern = "([01]?\d\d?|2[0-4]\d|25[0-5])"
        regObj = re.compile("\.".join([bytePattern]*4))
        for match in regObj.finditer(line):
            m1,m2,m3,m4 = match.groups()
            print "%s %s %s %s" %(m1, m2, m3, m4)
    

    我想把m1、m2、m3和m4分别转换成8bit的二进制值。我想不出一种方法来实现这一点。我对python是个新手,任何帮助都将非常感谢。

    干杯。

    4 回复  |  直到 9 年前
        1
  •  4
  •   Pratik Deoghare    14 年前
    ''.join([ bin(int(x))[2:].rjust(8,'0') for x in '123.123.123.123'.split('.')])
    
        2
  •  4
  •   CrackerJack9    11 年前

    将IPv4地址从点四字符串格式(例如123.45.67.89)转换为32位压缩二进制格式:

    socket.inet_aton ("192.168.65.72")

        3
  •  2
  •   Andre Holzner    9 年前

    如果需要包含32位IP地址的原始数据的字符串:

    import struct
    struct.pack('4B', *(int(x) for x in '123.123.123.123'.split('.')))
    

    或者,如果需要包含IP地址的32位整数:

    import struct
    struct.unpack('>I', struct.pack('4B', *(int(x) for x in '123.123.123.123'.split('.'))))
    
        4
  •  1
  •   poke    14 年前
    >>> bin( 192 )
    '0b11000000'
    

    字符串操作完成其余的工作。但请注意,在IP中,除第一部分外,其他所有部分都允许为零。