对168.192.1到255.1到255 这个区间进行ping命令
只要能ping通的就记录
以什么样的格式存储呢?txt?
import subprocess
def ping_ip(ip):
"""
ping指定IP地址,返回结果
:param ip: IP地址
:return: 如果ping通返回True,否则返回False
"""
ret = subprocess.call(['ping', '-c', '2', '-W', '1', ip],
stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)
return ret == 0
def get_ips(start_ip, end_ip):
"""
获取指定网段范围内的所有IP地址
:param start_ip: 起始IP地址,如192.168.0.1
:param end_ip: 结束IP地址,如192.168.0.255
:return: 返回IP地址列表
"""
ips = []
start = list(map(int, start_ip.split(".")))
end = list(map(int, end_ip.split(".")))
for i in range(start[0], end[0] + 1):
for j in range(start[1], end[1] + 1):
for k in range(start[2], end[2] + 1):
for l in range(start[3], end[3] + 1):
ip = "{}.{}.{}.{}".format(i, j, k, l)
if ping_ip(ip):
ips.append(ip)
return ips
# example usage
start_ip = "192.168.1.1"
end_ip = "192.168.1.255"
ips = get_ips(start_ip, end_ip)
print(ips)
注意,由于在 Windows 上 ping 命令不是像 Linux 那样的内置命令,因此在 Windows 上这个函数可能不能正常工作。同时,由于这个函数需要进行大量的 ping,因此对网络和计算机性能要求高。
我可以为您提供一个Python程序来实现这个功能。主要思路是使用Python的socket和subprocess模块。以下是代码实现步骤:
1.首先,导入所需的模块
import socket
import subprocess
2.然后,定义一个函数来检测某个IP地址是否可以响应ping命令。该函数中,使用Python的subprocess模块来执行ping命令,并根据返回结果判断该IP是否可达。如果可达,返回True,否则返回False。
def ping_ip(ip):
"""
检测IP地址是否能够ping通
"""
result = subprocess.call('ping %s -n 2 -w 1000' % ip, stdout=subprocess.PIPE)
if result == 0:
return True
else:
return False
3.接下来,定义一个函数来遍历指定网段内的所有IP地址,并调用上面的ping_ip函数来检测是否可达。如果可达,则将该IP地址记录到一个列表中。
def scan_ips(start_ip, end_ip):
"""
扫描指定网段内的所有IP地址,并记录可达的IP地址
"""
ips = []
for i in range(int(start_ip.split('.')[3]), int(end_ip.split('.')[3])+1):
ip = start_ip[:start_ip.rfind('.')+1] + str(i)
if ping_ip(ip):
ips.append(ip)
return ips
4.最后,调用上面定义的scan_ips函数,传入指定的起始和结束IP地址,即可获取指定网段内所有可ping通的IP地址。
if __name__ == '__main__':
start_ip = '192.168.1.1'
end_ip = '192.168.255.255'
ips = scan_ips(start_ip, end_ip)
print('可达IP地址数: %d' % len(ips))
for ip in ips:
print(ip)
完整代码如下:
import socket
import subprocess
def ping_ip(ip):
"""
检测IP地址是否能够ping通
"""
result = subprocess.call('ping %s -n 2 -w 1000' % ip, stdout=subprocess.PIPE)
if result == 0:
return True
else:
return False
def scan_ips(start_ip, end_ip):
"""
扫描指定网段内的所有IP地址,并记录可达的IP地址
"""
ips = []
for i in range(int(start_ip.split('.')[3]), int(end_ip.split('.')[3])+1):
ip = start_ip[:start_ip.rfind('.')+1] + str(i)
if ping_ip(ip):
ips.append(ip)
return ips
if __name__ == '__main__':
start_ip = '192.168.1.1'
end_ip = '192.168.255.255'
ips = scan_ips(start_ip, end_ip)
print('可达IP地址数: %d' % len(ips))
for ip in ips:
print(ip)