[英]Python help to take in a range of IP addresses from a text file and then output each ip address in the range
[英]Python 3, Take Text File of IP Addresses and Ping in Order
我正在Mac OS上工作,并且能够对文本文件进行排序,该文本文件由不按顺序排列的几个IP地址组成。 我能够按顺序对地址进行排序并进行打印。
我还想获取该新排序列表,并以相同顺序ping地址。
运行脚本后,地址将按顺序打印出来,但是扫描从文本文件中的最后一个地址开始。
码:
#!/usr/bin/env python3
import subprocess
with open("path to text file") as f:
lines = f.readlines()
for target in sorted(lines, key=lambda target:
(int(target.split(".")[1]))):
print(target)
print('-' * 40)
print('Attempting to ping IP Addresses in order... \n')
for line in target:
try:
ping = subprocess.Popen(
["ping", "-c", "1", "-l", "1", "-s", "1", "-W", "1", line],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
finally:
reach, error = ping.communicate()
print(reach)
例如,如果文本文件包含以下地址:
10.4.1.1,
10.6.1.1,
10.8.1.1,
10.20.1.1
我希望ping结果以该顺序打印出这些地址。
以下是脚本输出的内容:
10.4.1.1
10.6.1.1
10.8.1.1
10.20.1.1
尝试按顺序ping IP地址...
PING 1(0.0.0.1):1个数据字节\\ n \\ n --- 1个ping统计信息--- \\ n1个数据包已发送,0个数据包已接收,100.0%数据包丢失\\ n'
b'PING 0(0.0.0.0):1个数据字节\\ n \\ n --- 0个ping统计信息--- \\ n1个数据包已发送,0个数据包已接收,100.0%数据包丢失\\ n'
b''b'PING 2(0.0.0.2):1个数据字节\\ n \\ n --- 2个ping统计信息--- \\ n1个数据包被发送,0个数据包被接收,100.0%数据包丢失\\ n'
b'PING 0(0.0.0.0):1个数据字节\\ n \\ n --- 0个ping统计信息--- \\ n1个数据包已发送,0个数据包已接收,100.0%数据包丢失\\ n'
b''b'PING 1(0.0.0.1):1个数据字节\\ n \\ n --- 1个ping统计信息--- \\ n1个数据包被发送,0个数据包被接收,100.0%数据包丢失\\ n'
b''b'PING 1(0.0.0.1):1个数据字节\\ n \\ n --- 1个ping统计信息--- \\ n1个数据包被发送,0个数据包被接收,100.0%数据包丢失\\ n'
b''
理想情况下,我希望在ping通时打印出文本文件地址。 我不确定此错误是否是由于在开始时打开文件,然后再次使用它来ping或发生了什么。
错误for line in target:
您正在(重新)使用变量target
,它包含地址排序列表中的最后一个IP地址。 ( "10.20.1.1"
)。
如果使用for循环遍历字符串,则一次只能得到一个字符( ["1", "0", "2", "0", "1", "1"]
)-ping程序将尝试转换为IP地址的单个字符,但无法访问它们。
尝试像这样重组脚本(未经测试的伪代码):
with open(...) as f:
lines = f.readlines()
addresses = sorted(lines, ...)
print('showing addresses:')
for address in addresses:
print(address)
print('checking addresses:')
for address in addresses:
subprocess.Popen(['ping', ..., address], ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.