簡體   English   中英

Python將IP字符串打包為字節

[英]Python pack IP string to bytes

我想實現我自己的struct.pack特定函數來將IP字符串(即“192.168.0.1”)打包到32位打包值,而不使用內置方法的socket.inet_aton

我到目前為止:

ip = "192.168.0.1"
hex_list = map(hex, map(int, ip.split('.')))
# hex list now is : ['0xc0', '0xa8', '0x0', '0x01']

我的問題是:如何從['0xc0', '0xa8', '0x0', '0x01']'\\xc0\\xa8\\x00\\x01' ,(這是我從socket.inet_aton(ip)得到的) socket.inet_aton(ip)

還有 - 如何在該字符串的中間有一個NUL( \\x00 )?我認為我對\\x格式缺乏一些了解)

您可以根據需要使用字符串理解進行格式化:

ip = "192.168.0.1"
hex_list = map(int, ip.split('.'))
hex_string = ''.join(['\\x%02x' % x for x in hex_list])

或作為一個班輪:

hex_string = ''.join(['\\x%02x' % int(x) for x in ip.split('.')])

替代:

你能用ipaddressto_bytes (python 3.2)嗎?

>>> import ipaddress
>>> address = ipaddress.IPv4Address('192.168.0.1')
>>> address_as_int = int(address)
>>> address_as_int.to_bytes(4, byteorder='big')
b'\xc0\xa8\x00\x01'

請注意,您實際上可能只需要整數。

顯然可以更短,但想要清楚地顯示所有步驟:)

松散地關閉@ Stephen的答案,但返回一個包含實際字節的字符串,而不是帶有字面斜杠的字符串:

def pack_ip(ip):
    num_list = map(int, ip.split('.'))
    return bytearray(num_list)

src_ip = pack_ip('127.0.0.255')
print(repr(src_ip))

在Python 2和3中工作。返回b''而不是字符串,匹配Python3的最佳實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM