我想使用IP地址字符串,即:192.168.1.23,但只保留IP地址的前三个字节,然后追加0-255。我想将该IP地址转换为一系列IP地址'我可以传递给NMAP进行扫描扫描。
最简单的解决方案当然是简单地修剪字符串的最后两个字符,但当然,如果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"
它工作正常,但感觉很丑,对我来说效率不高。有什么更好的方法呢?
答案 0 :(得分:4)
您可以使用字符串对象的rfind函数。
>>> lhost = "192.168.1.23"
>>> lhost[:lhost.rfind(".")] + ".0-255"
'192.168.1.0-255'
rfind函数与find()类似,但从最后搜索。
RFIND(...) S.rfind(sub [,start [,end]]) - &gt; INT 返回S中找到substring sub的最高索引, 这样sub包含在S [start:end]中。可选的 参数start和end被解释为切片表示法。 失败时返回-1。
更复杂的解决方案可以使用常规表达:
>>> import re
>>> re.sub("\d{1,3}$","0-255",lhost)
'192.168.1.0-255'
希望它有所帮助!
答案 1 :(得分:1)
您可以拆分并获取前三个值,按'.'
加入,然后添加".0-255"
>>> lhost = "192.168.1.23"
>>> '.'.join(lhost.split('.')[0:-1]) + ".0-255"
'192.168.1.0-255'
>>>
答案 2 :(得分:1)
并非所有IP都属于C类。我认为代码必须灵活,以适应各种IP范围及其掩码, 我以前写过一个很小的python模块来计算网络ID&lt;具有任何网络掩码的给定IP地址的广播ID。 代码可以在这里找到:https://github.com/brownbytes/tamepython/blob/master/subnet_calculator.py
我认为networkSubnet()和hostRange()是可以为您提供帮助的功能。
答案 3 :(得分: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_))