5

そのため、プログラムが実行されているマシンのLAN IPアドレスを取得し、UDPを介して渡されたIPアドレスと比較しようとしています。

ただし、使用する場合:

print str(socket.gethostbyname(socket.gethostname()))

127.0.0.1を返します。これは192.168.1.9である必要があります。

Linuxマシンを調べて、lo(loopBack)ポートのIPアドレスを取得しましたか?それが何であるか正確にはわかりませんが、eth0のIPアドレスを取得しているはずです。

bashコマンド「ifconfigeth0」をサブプロセスできることがわかりましたが、それは文字列の大きなブロックを返します。必要なものまで処理できますが、これはビーグルボーンで1秒間に約3回実行されるので、もう少し効率的にしたいと思います。

これを行うためのよりエレガントな方法はありますか?

gethostnameのターゲットを変更できますか?

なぜそれはloポートをターゲットにしているのですか?

あなたの助けのマナーをありがとう。

4

2 に答える 2

4

マシンの完全修飾ドメイン名を返してみてください:

print str(socket.gethostbyname(socket.getfqdn()))

/etc/hostsおそらく、ホスト名を127.0.0.1に解決するエントリがあるため、socket.gethostbyname()期待どおりに返されません。

元の質問はここで尋ねられ、回答されましたが、socket.getfqdn()解決策は一目でわかりませんでした。そのルートに進むことにした場合、出力を解析するための解決策は次のとおりです。ifconfig標準ライブラリは、問題を解決するのに十分すぎるようです。

于 2013-03-13T17:53:20.243 に答える
1

netifacesは、あなたのためにトリックを行うはずのかなり甘い python モジュールのようです。

于 2013-03-13T17:49:56.277 に答える