使用Python进行IP地址转换

时间:2010-08-12 06:03:35

标签: python

我想将从十进制格式的文件(192.168.65.72)读取的IP地址转换为二进制格式的文件{110000001010100001000001010001000}。我正在从文件中读取十进制格式的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转换为8位二进制值。我无法想出办法。我是python的新手。非常感谢任何帮助。

干杯。

5 个答案:

答案 0 :(得分:4)

''.join([ bin(int(x))[2:].rjust(8,'0') for x in '123.123.123.123'.split('.')])

答案 1 :(得分:4)

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

socket.inet_aton ("192.168.65.72")

答案 2 :(得分:2)

如果需要包含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('.'))))

答案 3 :(得分:1)

>>> bin( 192 )
'0b11000000'

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

答案 4 :(得分:0)

如果您将文件读入 DataFrame,则可以使用库 DataPrep 中的函数 function csv { $Path = read-host "Where is the CSV stored? Make sure it is in a Readable Location" # Here is where The user would be prompted for the path of the CSV $Users = Import-Csv -Path $Path foreach ($User in $Users) { $Displayname = $User.'Firstname' + " " + $User.'Lastname' $UserFirstname = $User.'Firstname' $UserLastname = $User.'Lastname' $OU = $User.'OU' $SAM = $User.'SAM' $UPN = $User.'Firstname' + "." + $User.'Lastname' + "@" + $User.'Maildomain' $Description = $User.'Description' $Password = $User.'Password' New-ADUser -Name "$Displayname" -DisplayName "$Displayname" -SamAccountName $SAM -UserPrincipalName $UPN -GivenName "$UserFirstname" -Surname "$UserLastname" -Description "$Description" -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) -Enabled $true -Path "$OU" -ChangePasswordAtLogon $false –PasswordNeverExpires $true } } 。使用 clean_ip() 安装 DataPrep。

pip install dataprep