获取IP地址的前三个字节

1 投票
4 回答
4874 浏览
提问于 2025-04-18 04:01

我想用一个IP地址字符串,比如说:192.168.1.23,但只保留这个IP地址的前三个部分,然后再加上0到255的数字。我想把这个IP地址变成一个可以传给NMAP进行扫描的IP地址范围。

最简单的办法当然是直接把这个字符串的最后两个字符去掉,但这样做在IP是192.168.1.1或者192.168.1.123的时候就不行了。

这是我想到的解决办法:

lhost = "192.168.1.23"

# Split the lhost on each '.' then re-assemble the first three parts
lip = self.lhost.split('.')
trange = ""
for i, val in enumerate(lip):
    if (i < len(lip) - 1):
        trange += val + "."

# Append "0-255" at the end, we now have target range trange = "XX.XX.XX.0-255"
trange += "0-255"

这个方法可以用,但我觉得看起来不太好,而且效率也不高。有没有更好的办法呢?

4 个回答

0

我喜欢这个:

#!/usr/bin/python3

ip_address = '128.200.34.1'

list_ = ip_address.split('.')
assert len(list_) == 4
list_[3] = '0-255'

print('.'.join(list_))
1

并不是所有的IP地址都是C类的。我觉得代码应该灵活一些,以适应不同的IP范围和它们的掩码。我之前写过一个小的Python模块,可以计算给定IP地址和任何网络掩码下的网络ID和广播ID。代码可以在这里找到:https://github.com/brownbytes/tamepython/blob/master/subnet_calculator.py

我认为networkSubnet()和hostRange()这两个函数可能对你有帮助。

1

你可以把这个字符串分开,取出前面三个值,然后用一个'.'把它们连接起来,最后再加上".0-255"

>>> lhost = "192.168.1.23"
>>> '.'.join(lhost.split('.')[0:-1]) + ".0-255"
'192.168.1.0-255'
>>> 
5

你可以使用字符串对象的 rfind 函数。

>>> lhost = "192.168.1.23"
>>> lhost[:lhost.rfind(".")] + ".0-255"
'192.168.1.0-255'

rfind 函数和 find() 很像,但它是从字符串的末尾开始查找。

rfind(...) S.rfind(sub [,start [,end]]) -> int 返回在字符串 S 中找到子字符串 sub 的最高索引, 这个子字符串是在 S[start:end] 范围内的。可选的 start 和 end 参数的用法和切片表示法一样。 如果找不到,返回 -1。

一个更复杂的解决方案可以使用正则表达式,如下所示:

>>> import re
>>> re.sub("\d{1,3}$","0-255",lhost)
'192.168.1.0-255'

希望这对你有帮助!

撰写回答