Pythonで簡単にローカルネットワークからIPアドレスまたはホスト名のリストを取得するにはどうすればよいですか?
マルチプラットフォームであれば最適ですが、最初にMac OS Xで動作する必要があり、次に他のユーザーがそれに続きます。
編集:ローカルとは、すべてを意味しますアクティブローカルネットワーク内のアドレス(192.168.xxx.xxx
など)。
そのため、(ローカルネットワーク内の)コンピューターのIPアドレスが192.168.1.1
で、他に3台のコンピューターが接続されている場合、IPアドレス192.168.1.2
、192.168.1.3
を返します。 、192.168.1.4
、および場合によってはそれらのホスト名。
「ローカル」とは、同じネットワークセグメントを意味する場合、次の手順を実行する必要があります。
または、Python nmapを外部で実行し、結果をプログラムにパイプで戻すことができます。
Update:スクリプトは github に配置されました。
small python script 、 scapy のarping()
を活用する)を書きました。
コンピューターの名前がわかっている場合は、次を使用できます。
import socket
IP1 = socket.gethostbyname(socket.gethostname()) # local IP adress of your computer
IP2 = socket.gethostbyname('name_of_your_computer') # IP adress of remote computer
そうでない場合は、別の回答に記載されているように、ローカルコンピューター(IP1)と同じマスクに従うすべてのIPアドレスをスキャンする必要があります。
試してください:
import socket
print ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1])
私はこれを見つけました python記事 のネットワークスキャナー)=この短いコードを書きました。あなたが望むことをします!ただし、デバイスのアクセス可能なポートを知る必要があります。ポート22 sshの標準であり、私が使用しているものです。すべてのポートでループできると思います。デフォルトは次のとおりです。
linux: [20, 21, 22, 23, 25, 80, 111, 443, 445, 631, 993, 995]
windows: [135, 137, 138, 139, 445]
mac: [22, 445, 548, 631]
import socket
def connect(hostname, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(1)
result = sock.connect_ex((hostname, port))
sock.close()
return result == 0
for i in range(0,255):
res = connect("192.168.1."+str(i), 22)
if res:
print("Device found at: ", "192.168.1."+str(i) + ":"+str(22))