これは間違いなく重複していません。
アプリを実行していて、デバイスの IP を見つける必要があります。私は彼らの名前を知っており、彼らの名前から IP を取得する必要があります。Linux は簡単なはずですが、クロスプラットフォームの姿勢が必要なので、Python を使用しています。
私はすでに解決策を知っています:
import socket
socket.gethostbyname('pc_name')
解決策を知っているのに、なぜ質問しているのですか? 安定した結果が得られないので、ちょっと待ってください。
状況: 同じホスト名を持ついくつかのラズベリー パイの IP を見つける必要があります。
Raspberry pi device 1: Hostname: 'MyPi', Local IP: 10.0.0.33
Raspberry pi device 2: Hostname: 'MyPi', Local IP: 10.0.0.34
Raspberry pi device 3: Hostname: 'MyPi', Local IP: 10.0.0.35
したがって、ソケットのドキュメントによると(正しく読んだ場合)、
socket.gethostbyname('MyPi')
ただし、1つのIPのみを返します
socket.gethostbyname_ex('MyPi')
特定のホスト名のすべての IP を返す必要があります。
私は自宅で状況をシミュレートしましたが、結果は非常に満足のいくものではありませんでした. 私は自分のラズベリー パイを Android フォンとして「Galaxy-J5-2016」と呼びました。アドレスでそれらを見つけようとしたことを確認するには:
>>> socket.gethostbyaddr('10.0.0.33')
('Galaxy-J5-2016', [], ['10.0.0.33'])
>>> socket.gethostbyaddr('10.0.0.34')
('Galaxy-J5-2016', [], ['10.0.0.34'])
良い、それらは存在します。ここに書く前にテストしたところ、検索すると1つも結果が得られました
socket.gethostbyname('Galaxy-J5-2016')
しかし、今は試しても何も見つかりません
socket.gethostbyname_ex('Galaxy-J5-2016')
上記の両方のコマンドは、単に応答なしで待機し、次のように応答します。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.gaierror: [Errno 11001] getaddrinfo failed
別の現象が発生しました: 仕事用のラップトップで最後に述べたコマンドを試すと (仕事用の PC は他のコンピューターとホスト名を共有していませんが)、
>>> socket.gethostbyname_ex('WORK_PC.DOM1.DOM2')
('WORK_PC.DOM1.DOM2', [], ['172.xx.xx.1', '10.0.xx.1', '172.xx.xx.241',
'192.xx.xx.1', '192.xx.xx.1', **'10.0.0.41'**])
興味深いことに、10.0.0.41は現在、私の職場の PC が自宅で使用しているローカル IP アドレスです (残りは私の職場のネットワークからのもののようです)。
言い換えれば、同じホスト名を持つ 2 台のマシンがあり、IP アドレスはゼロまたは 1 つしか取得できず、仕事用 PC は 1 台のマシンにすぎず、同じマシンの複数の IP を取得しますが、これらの IP は実際のローカルからでもありません。通信網)
PS (「arp -a」とアドバイスしていただける場合): 一般的なコマンド「arp -a」は、コマンド マシンと最近接触したすべてのローカル IP を表示するため、役に立ちません。そのため、特定のデバイスに ping を実行して、それらが arp -a コマンドにリストされていることを確認する必要があります。
PS2: また、すべての IP を通過する必要があるソリューションは必要ありません。存在しない IP に ping を実行すると数秒のタイムアウトが発生するため、このソリューションは非常に低速です。255 IP + タイムアウトは良くありません。
正直なところ、ローカルネットワークに接続されているすべてのデバイスをすぐにリストするpythonコマンドがあれば、それで十分です...しかし、このようなものは見つかりませんでした。
私は何か間違ったことをしていますか?案内してもらえますか?
前もって感謝します