Простая программа ping sweep может запускаться, но также с ошибкой

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь создать простую программу ping sweep с python 3.x, как показано ниже

 import subprocess

subnet = "ping -c 1 10.1.1."

for i in range(250, 251):
    subprocess.call(["ping -c1 10.1.1."   str(i)], shell=True)
  

Она может выдавать правильные результаты; однако, также возвращаются некоторые ошибки. Могу ли я узнать, связано ли это как-то с моим кодом?

Результаты:

 PING 10.1.1.250 (10.1.1.250) 56(84) bytes of data.
64 bytes from 10.1.1.250: icmp_seq=1 ttl=128 time=1.72 ms

--- 10.1.1.250 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.723/1.723/1.723/0.000 ms
PING 10.1.1.251 (10.1.1.251) 56(84) bytes of data.
64 bytes from 10.1.1.251: icmp_seq=1 ttl=128 time=1.88 ms

--- 10.1.1.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.884/1.884/1.884/0.000 ms
PING 10.1.1.252 (10.1.1.252) 56(84) bytes of data.
64 bytes from 10.1.1.252: icmp_seq=1 ttl=128 time=1.100 ms

Traceback (most recent call last):
  File "test2.py", line 6, in <module>
    subprocess.call(["ping -c1 10.1.1."   str(i)], shell=True)
  File "/usr/lib/python3.7/subprocess.py", line 325, in call
    return p.wait(timeout=timeout)
  File "/usr/lib/python3.7/subprocess.py", line 990, in wait
    return self._wait(timeout=timeout)
  File "/usr/lib/python3.7/subprocess.py", line 1624, in _wait
    (pid, sts) = self._try_wait(0)
  File "/usr/lib/python3.7/subprocess.py", line 1582, in _try_wait
    (pid, sts) = os.waitpid(self.pid, wait_flags)
  

Спасибо.

Комментарии:

1. Да, вы должны обработать KeyboardInterrupt , если хотите, чтобы она завершилась, на ctrl c 🙂

Ответ №1:

Вы должны обработать KeyboardInterrupt ,

 import subprocess

netaddress = "10.1.1.{}"
limit = (10,255)
for i in range(*limit):
    try:
        subprocess.call(["ping", "-c1", netaddress.format(i)])
    except KeyboardInterrupt as interrupt:
        print("Skipping....")
        # or `break` if you want to exit