1

ネットワークに接続されているすべてのライブ IP を最速の方法で印刷しようとしています。for ループで ping を実行しようとしましたが、非常に遅いです。

def PingTry(host):
    ping = subprocess.Popen(["ping", host], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
    out, error = ping.communicate()
    print out #This will show me the ping result, I can check the content and see if the host replyed or not

私が言ったように、それは非常に遅いです (これを 255 回行う必要があります)。

ポート80でTCP接続を使用して接続しようとしました:

import socket
IP = '192.168.1.100'
PORT = 80
tcpsoc = socket(AF_INET, SOCK_STREAM)
tcpsoc.listen(SOMAXCONN)
try:
    tcpsoc.bind(ADDR)
except Exception,ex:
    print "host is down!"

ただし、ルーターIPでは機能していますが、このIPでは機能しません

すべてのライブ IP をより速く取得する方法はありますか?

4

4 に答える 4

0

Ping は、マシンが IP アドレスを要求したかどうかをマシンに尋ねる適切な方法です。(プラットフォームによっては) ping タイムアウトが通常 1 秒であるため、低速です。タイムアウトを減らすか、スレッドモジュールを使用して複数の ping を同時に送信することで、速度を上げることができます。

Python で直接 ping を実装します: Python でサーバーにPing を実行する

または、 nmapなどのツールを使用します。

于 2013-07-07T16:17:51.223 に答える