使用python我需要在已经使用的IP地址范围内找到下一个IP地址。所以,如果我有一个IP地址列表,如...
IPs = ['10.220.1.1','10.220.1.2','10.220.1.3','10.220.1.5']
当我要求下一个IP地址时,我需要它返回< 10.220.1.4'。下一个请求将返回< 10.220.1.6'等等。
答案 0 :(得分:3)
如果您使用的是Python 3.3(或更新版本),则可以使用ipaddress
模块。子网var lat, lng;
map.addEventListener('mousemove', function(ev) {
lat = ev.latlng.lat;
lng = ev.latlng.lng;
});
document.getElementById("transitmap").addEventListener("contextmenu", function (event) {
// Prevent the browser's context menu from appearing
event.preventDefault();
// Add marker
// L.marker([lat, lng], ....).addTo(map);
alert(lat + ' - ' + lng);
return false; // To disable default popup.
});
中所有主机的示例,10.220.1.0/24
中的主机除外:
reserved
所以基本上这可以在一行中完成(+导入和定义网络和保留地址)。
答案 1 :(得分:0)
您可以使用ipaddress模块使用生成器,该模块是来自python> = 3.3的bultin,或者您可以使用pip安装早期版本:
In [20]: from ipaddress import ip_network
In [21]: IPs = {'10.220.1.1','10.220.1.2','10.220.1.3','10.220.1.5'}
In [22]: net = ip_network(u"10.220.1.0/24")
In [23]: avail =(str(ip) for ip in net.hosts() if str(ip) not in IPs
....: )
In [24]: next(avail)
Out[24]: '10.220.1.4'
In [25]: next(avail)
Out[25]: '10.220.1.6'
答案 2 :(得分:0)
如果您使用的是Python 3,则可以将ipaddress
与generator:
import ipaddress
def gen_ip(start, reserved):
start = int(ipaddress.IPv4Address(start))
for i in range(start + 1, int(2 ** 32) + 1):
ip = str(ipaddress.IPv4Address(i))
if ip not in reserved:
yield ip
IPs = ['10.220.1.1','10.220.1.2','10.220.1.3','10.220.1.5']
j = 0
for ip in gen_ip(min(IPs), set(IPs)):
print(ip)
j += 1
if j == 5:
break
输出:
10.220.1.4
10.220.1.6
10.220.1.7
10.220.1.8
10.220.1.9
答案 3 :(得分:0)
创建一个基本的ip对象来保存当前ip的记录并获取下一个ip
class IPObj(object):
def __init__(self, list_of_ips):
self.position = 0
self.ips = list_of_ips
self.current_ip = self.ips[self.position]
def next_ip(self, stop_iteration=False):
'''
return the next ip in the list
'''
if self.position >= len(self.ips)-1:
self.position = 0 # By default next_ip will do nothing when it reaches the end but it will throw an exception if stop_iteration==True
if stop_iteration:
raise StopIteration
self.position += 1
self.current_ip = self.ips[self.position]
return self.current_ip
def __repr__(self):
return repr(self.current_ip)
#Testing
ips = IPObj(['10.220.1.1','10.220.1.2','10.220.1.3','10.220.1.5'])
print ips
while True:
print ips.next_ip(True),
输出: 10.220.1.1, 10.220.1.2, 10.220.1.3, 10.220.1.5,
追踪(最近一次呼叫最后一次):
文件“C:\ Users \ J10ey \ workspace \ SO_Help \ src \ ip's.py”,第32行,在 print ips.next_ip(True) 在next_ip中输入文件“C:\ Users \ J10ey \ workspace \ SO_Help \ src \ ip's.py”,第21行 提高StopIteration StopIteration异常
答案 4 :(得分:0)
将您的列表转换为一组,以提高性能:
used_ips = set(IPs)
现在生成您想要的IP#,并检查它们是否包含在集合中:
for next_ip in generate_ip_numbers():
if next_ip in used_ips:
continue
print("Next ip address is:", next_ip)