简体   繁体   English

无法从文件 ping 多个 IP 地址

[英]Unable to ping multiple IP addresses from file

I have a file ip.txt file which contains a list of IP addresses.我有一个包含 IP 地址列表的文件ip.txt文件。 I want to ping each address in the file and repeat this forever.我想 ping 文件中的每个地址并永远重复这个。 But my script only pings the address contained in the last line (see output below).但是我的脚本只 ping 最后一行中包含的地址(见下面的输出)。 How can I modify my script to fix this?如何修改我的脚本来解决这个问题?

import cmd
import time
import sys
import os

my_file = open("ip.txt","rb")
for line in my_file:
        l = [i.strip() for i in line.split(' ')]
        IP = l[0]

def Main():

    while True:
        ping = os.system("ping", "-c", "1", "-n", "-W", "2", IP)
        if ping:
            print IP 'no connection'
            CT =time.strftime("%H:%M:%S %d/%m/%y")
            alert=' No Connection'
            with open('logfile.txt','a+') as f:
                f.write('\n'+CT)
                f.write(alert)

        time.sleep(4)

if __name__ == "__main__":
    Main()

Output:输出:

[root@localhost PythonScript]# python pingloop.py
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=128 time=0.655 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=128 time=1.15 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=128 time=1.14 ms
64 bytes from 192.168.1.100: icmp_seq=4 ttl=128 time=0.529 ms
64 bytes from 192.168.1.100: icmp_seq=5 ttl=128 time=0.538 ms

--- 192.168.1.100 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 0.529/0.805/1.156/0.287 ms
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=128 time=0.476 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=128 time=0.416 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=128 time=0.471 ms
64 bytes from 192.168.1.100: icmp_seq=4 ttl=128 time=0.478 ms
64 bytes from 192.168.1.100: icmp_seq=5 ttl=128 time=0.574 ms

ip.txt file: ip.txt文件:

192.168.1.91
192.168.1.92
192.168.1.93
192.168.1.94
192.168.1.95
192.168.1.96
192.168.1.97
192.168.1.98
192.168.1.99
192.168.1.100
for line in my_file: l = [i.strip() for i in line.split(' ')] IP = l[0]

Here you overwrite the previously read IP address with the new address in each iteration.在这里,您在每次迭代中用新地址覆盖先前读取的 IP 地址。 So in the end, as you observed, you only have the last address.所以最后,正如你所观察到的,你只有最后一个地址。

Instead, build a list of addresses:相反,构建一个地址列表

addresses = []
for line in my_file:
    IP = line.split()[0].strip()
    addresses.append(IP)

or simply或者干脆

addresses = [line.split()[0].strip() for line in my_file]

Later, you have to add an additional loop over the list of addresses.稍后,您必须在地址列表上添加一个额外的循环。 Instead of:代替:

 while True: ping = os.system("ping", "-c", "1", "-n", "-W", "2", IP) # etc.

do

while True:
    for IP in addresses:
        ping = os.system("ping", "-c", "1", "-n", "-W", "2", IP)
        # etc.

Define IP as a global list variable and add all ip addresses to this list then iterate over the list:IP定义为全局列表变量并将所有 ip 地址添加到此列表中,然后遍历列表:

IP = []
for line in my_file: 
    l = [i.strip() for i in line.split(' ')] 
    IP.append(l[0])

# instead while use for 
for ip in IP: 
    ping = os.system("ping", "-c", "1", "-n", "-W", "2", ip)
    ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM