明確にするために:私はちょうど2週間前にPythonを始めましたが、私はC#、ASP、PHP、JavaScript開発者です。
PythonとPyQtを使用して新しいプロジェクトを開始しました。プロジェクトを、他のコンピューター上のこのサーバーの他のインスタンスと通信できるサーバーにしたいです。
したがって、コンピューターのIPアドレスとホスト名を取得する必要があります。
最初に、MSDOSの「netview」コマンドを使用することを考えましたが、これは私の仕事でこのコマンドを試す前であり、これには約15秒かかることがわかりました(遅すぎると思います)。
私はからこのアイデアを持っていました: https://stackoverflow.com/a/15497083/1598891
また、「net view」コマンドは、ネットワーク上に存在しなくなったコンピューターを返し、ホスト名でIPアドレスを取得しようとすると例外が発生する可能性があります(これにより、コンピューターにアクセスできなくなるたびにプロセスが遅くなります)。
私の質問:net view
は遅い操作になる可能性があるため、Windowsでnet view
を通過せずに、ローカルネットワーク上のすべてのコンピューターのIPとホスト名を取得する方法はありますか?
また、アプリケーションを実行しているコンピューターのみを取得する方法はありますか?(より高速になります)
前もって感謝します
pythonスクリプトが実行されているホストのIPアドレスを取得する場合は、user2096338行く方法です。
LAN内のネットワーク上のすべてのコンピューターを検出するには、 scapy を使用できます。 https://github.com/bwaldvogel/neighbourhood/blob/master/neighbourhood.py は、閲覧中に見つけたリンクです 類似 SO質問;ネットワーク(LAN)内のすべてのコンピューターを検出します。
上記のスクリプトがサーバーを実行しているコンピューターのみを返すようにしたい場合は、複数の方法があり、移植性の順に以下にリストされています。
私の意見では、方法1は、セキュリティホールである不要なポート(方法3など)が開かないようにするため、最も安全で移植性があります(コンテキストに応じて、pythonスクリプトが実行されます)。また、リモートホストでのWMIサービスの可用性にも依存しません(一部のシステムではWMIが無効になっている場合があります)。
お役に立てれば
ローカルホストのホスト名とIPには、ソケットモジュールとgethostname、およびgethostbynameメソッドを使用できます。
import socket
hostname = socket.gethostname()
IP = socket.gethostbyname(hostname)