2

ifconfig を試してみると、ネットワーク アダプタに関するすべての情報が表示されます。

私は試した :

system( "ifconfig -a | grep inet | "
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
          " > address.txt" ) ;

2つの Ips を出力します:

  inet  addr:17.24.17.229
  inet  addr:127.0.0.1

しかし、私は最初のものだけが必要です。どうすればこれを除外できますか。

4

6 に答える 6

2

使うかもしれませんheadが...

もちろん、私は間違っているかもしれませんが、最初のものは本当に必要ないと思います。

おそらく、ゲートウェイ (またはインターネット) に接続されているものを探しているでしょう。

私の知る限り、IP アドレスまたはインターフェイスの順序は不特定です。

正確に何を達成したいですか?

どのインターフェイスが「インターネットに接続されている」かを知りたい場合、より信頼性の高い方法は、( を使用して)デフォルト ルートrouteを持つインターフェイスを見つけ、それを使用ifconfig <interface>して正しい IP アドレスを直接取得することです。

于 2010-10-22T15:05:26.983 に答える
1

grepとの使用を減らすことができますhead

ifconfig -a | sed -nr -e '/inet\b/{s|^.*inet\s+addr:(.[^ \t]*).*|\1|;h}' -e '${x;p}'
于 2010-10-22T15:50:30.953 に答える
1

私はiproute2のを使用しますip

ip -o addr show dev eth0 | while read IFNUM IFNAME ADDRTYPE ADDR REST; do [ "$ADDRTYPE" == "inet" ] && echo $ADDR; done
9.87.65.43/21

(解析が簡単なだけでなく、表示ifconfigできないセカンダリ IP なども表示されます。)

于 2010-10-22T16:05:44.417 に答える
0

すべてのアダプターを表示するのではなく、必要なアダプターだけを表示してください。

system( "ifconfig -a eth0 | grep inet | "
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
          " > address.txt" ) ;
于 2010-10-22T15:08:49.710 に答える
0

ifconfigまたはの出力がip変更されると、プログラムが壊れます。

SIOCGIFCONF ioctl()を使用して、ソースから直接取得してみませんか?

ETA: また、任意のシステムに 1 つのループバック インターフェイスと、1 つのアドレスを持つ 1 つのイーサネットしかないと仮定するのも安全ではありません。

于 2010-10-22T16:34:26.107 に答える
0

「ifconfig eth0」はどうですか?

于 2010-10-22T17:09:59.140 に答える