【问题标题】:Converting an IP Address string to exactly 4 bytes in Python在 Python 中将 IP 地址字符串转换为 4 个字节
【发布时间】:2016-01-19 16:46:42
【问题描述】:

所以这很简单,但我无法让它工作。例如,如果传入的 IP 地址字符串是“168.108.114.22”,我想将其转换为字节对象,例如:

\xA8\x6C\x72\x16

基本上,IP 地址的每一部分都被转换成它的十六进制等效值。

我尝试了很多方法,但无法得到我想要的。字符串操作,使用 socket.inet_aton,打包等。我希望能够通过套接字发送这些字节,然后在另一端接收和解析它们,但是我无法创建我的字节对象并看起来像那样.

【问题讨论】:

    标签: python sockets ip byte


    【解决方案1】:

    Python 的 inet_aton 函数应该可以满足您的需求,它确实返回了一个正好包含 4 个字节的字符串:

    import socket
    
    print socket.inet_aton('168.108.114.22')
    print socket.inet_aton('65.66.67.68')
    

    这些会显示:

    ¨lr
    ABCD 
    

    然后使用inet_ntoa 再次将四个字符转换回来:

    print socket.inet_ntoa('\xA8\x6C\x72\x16')
    print socket.inet_ntoa('ABCD')
    

    给予:

    65.66.67.68
    

    【讨论】:

    • 如何将其转换回套接字另一端的 IP 地址?如果我通过这种方式发送,在使用 inet_aton 转换后。
    • ntoa 即 network-to-ascii(它们都来自良好的 ol' C)
    【解决方案2】:

    这个

    ip='168.108.114.22'
    
    b_out = bytes(map(int,ip.split('.')))
    print(b_out)
    

    在 python 3 上产生

    b'\xa8lr\x16'
    

    如果我理解正确的话,这应该是你要找的东西。

    注意:有更具体和优化的实用程序函数来操作 IP 地址

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 2016-01-19
      • 2017-08-25
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多