簡體   English   中英

在Python中將IP地址字符串轉換為二進制

[英]Convert IP address string to binary in Python

作為大型應用程序的一部分,我正在嘗試將 IP 地址轉換為二進制。 目的是稍后計算 LAN 流量喚醒的廣播地址。 我假設有一種比我想的方式更有效的方法來做到這一點。 它通過八位字節分解IP地址,在必要時在每個八位字節的開頭添加0,將每個八位字節轉換為二進制,然后組合結果。 我應該查看 netaddr、套接字還是完全不同的東西?

示例:從 192.168.1.1 到 11000000.10101000.00000001.00000001

套接字 inet_aton()你想要什么?

目的是稍后計算 LAN 流量喚醒的廣播地址

ipaddr (見PEP 3144 ):

import ipaddr

print ipaddr.IPNetwork('192.168.1.1/24').broadcast
# -> 192.168.1.255

在 Python 3.3 中, ipaddress模塊

#!/usr/bin/env python3
import ipaddress

print(ipaddress.IPv4Network('192.162.1.1/24', strict=False).broadcast_address)
# -> 192.168.1.255

要完全匹配您問題中的示例:

# convert ip string to a binary number
print(bin(int(ipaddress.IPv4Address('192.168.1.1'))))
# -> 0b11000000101010000000000100000001

你想到下面這樣的事情嗎?

ip = '192.168.1.1'
print '.'.join([bin(int(x)+256)[3:] for x in ip.split('.')])

我同意其他人的觀點,您可能應該避免轉換為二進制表示來實現您想要的。

您可以使用字符串格式函數將數字轉換為二進制。 我做了這個功能:

def ip2bin(ip):
    octets = map(int, ip.split('/')[0].split('.')) # '1.2.3.4'=>[1, 2, 3, 4]
    binary = '{0:08b}{1:08b}{2:08b}{3:08b}'.format(*octets)
    range = int(ip.split('/')[1]) if '/' in ip else None
    return binary[:range] if range else binary

這將返回一個二進制 IP 或 IP 范圍,因此您可以使用它來測試 IP 是否在一個范圍內:

>>> ip2bin('255.255.127.0')
'11111111111111110111111100000000'
>>> ip2bin('255.255.127.0/24')
'111111111111111101111111'
>>> ip2bin('255.255.127.123').startswith(ip2bin('255.255.127.0/24'))
True

在變量中定義 IP 地址

ipadd = "10.10.20.20"

轉換列表中的 IP 地址

ip = ipadd.split(".")

現在將IP地址轉換為二進制數

print ('{0:08b}.{1:08b}.{2:08b}. 
    {3:08b}'.format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3])))

00001010.00001010.00010100.00010100
IP = '192.168.1.1'

ip2bin =  ".".join(map(str,["{0:08b}".format(int(x)) for x in IP.split(".")]))
print(ip2bin)

輸出

11000000.10101000.00000001.00000001

ip = '192.168.1.1'

k=[""]

對於 ip.split(".") 中的 x:

   a=(bin(int(x))[2:])
   k.append(a)    

print(".".join(list(k))[2:])

我應該查看 netaddr、套接字還是完全不同的東西?

對於當今的任何人,如果您想做 Python 3.3+ 內置ipaddress模塊不支持的任何事情,您應該使用netaddr 以下是您將如何使用netaddr做您想做的事情,例如:

>>> from netaddr import IPAddress
>>> ip = IPAddress('192.168.1.1')
>>> print(ip.bits())
11000000.10101000.00000001.00000001

暫無
暫無

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

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