2017-01-15 10 views
1

socket.inet_aton 내장 메서드를 사용하지 않고 IP 문자열 (즉, "192.168.0.1")을 32 비트 값으로 묶을 수있는 특정 기능을 내 자신의 struct.pack 구현하고 싶습니다. 파이썬 팩 IP 문자열

내가 지금까지 가지고 :

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)

(에서 얻고 무엇인가 또한 - 그 문자열의 중간에 NUL (\x00)이있을 가능성이 있습니까? \x 형식에 대한 이해가 부족합니다.

답변

0

대안 :

당신이 ipaddressto_bytes (파이썬 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' 

사실 정수만 필요할 수도 있습니다.

은 분명히 짧아 질 수 있지만, 분명히 모든 단계 :

+0

답변 해 주셔서 감사합니다. –

1
당신이 원하는대로 당신은 형식을 문자열 이해를 사용할 수 있습니다

보여주고 싶었어요 수 :

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('.')]) 
+0

나는 그것을 시도했지만 '\ xc0 \ xa0 \ xa8 \ x00 \ x01'과 같지 않은 '\\ xc0 \\ xa8 \\ x00 \\ x01'을 얻는다. 똑같은가요? –

+0

'\\'는 파이썬이 여러분에게 하나의'\'를 보여주기위한 방법 일뿐입니다. ''\\ x % 02x ''를'r '\ x % 02x' '로 변경하고 같은 결과를 얻는다는 것에주의하십시오. –

+0

그 사실을 알고 있지만이 주소를 보낼 때도 동일 할 것입니까? 'socket.inet_aton'에 의해 수신 된 값과 같을까요? –