web-dev-qa-db-ja.com

Linux / bash:インターフェースのIPv6アドレスを取得する方法は?

スクリプトでインターフェイスのIPv6アドレスを取得するために使用できるコマンドは何ですか?

更新:回答の1つからのsedの出力。

$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::224:d7ff:fed0:4f5c/64 scope link 
       valid_lft forever preferred_lft forever

その他:

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'
$ ip addr show dev eth0
  2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
  link/ether f0:de:f1:7b:e9:6c brd ff:ff:ff:ff:ff:ff
5
Ondra Žižka

あなたが使用することができます:

ip -6 addr

構成したすべてのIPv6アドレスが返されます。

11
Robert

これを行う方法はたくさんあります。

これが1つです:

ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

これは、アドレスのみを削除することを除いて、Robertの回答に似ています。

13
Paul

Linuxを使用している場合は、次を解析することもできます。/proc/net/if_inet6

最初の列は、コロンのない完全なIPv6です。 6番目の列はインターフェイス名です。

ここでは、かなり長い、最適化されていないバージョン(私は今だけawkの基本です)おそらくpython/Perlがより良い選択です。

for i in "$(grep enp0s25 /proc/net/if_inet6)"; do
    echo "$i" | awk '{
        split($1, _, "[0-9a-f]{,4}", seps)
        joined = sep = ""
        for (i=1; i in seps; i++) {
            joined = joined sep seps[i]
            sep = ":"
        }
        print joined
    }'
done

GNU awk(gawk)がある場合、これは次のように短縮できます。

for i in "$(grep enp0s25 /proc/net/if_inet6)"; do
    echo "$i" | gawk '@include "join"
    {
        split($1, _, "[0-9a-f]{,4}", seps)
        print join(seps, 1, length(seps), ":")
    }'
done

後で使用するために、{ba、z、} sh関数に入れることができます。

1
Inrin

ここで説明する他のアプローチは、IFの名前がeth0でない場合、失敗します。そして、SystemDの世界では、IF名は予測可能とはほど遠いです IF命名規則が大幅に変更されました

私のアプローチでは、代わりにグローバルユニキャストアドレスを見つけて抽出します-IFの名前が何であれ。 IPv6アドレスはwlan0-またはその他の名前-に構成でき、bashスニペットはそれを構成ファイル内の変数として正常に抽出および展開し、リスニングアドレスを指定する必要があります。

IPV6GLOBALUNICAST="$(ip -6 addr|awk '{print $2}'|grep -P '^(?!fe80)[[:alnum:]]{4}:.*/64'|cut -d '/' -f1)"

以下を、テスト用に構成されたIPv6アドレスを持つホストのCLIに貼り付けます。

ip -6 addr|awk '{print $2}'|grep -P '^(?!fe80)[[:alnum:]]{4}:.*/64'|cut -d '/' -f1

私はこれを大成功で使用しており、これまでどのような状況でも失敗していません。 HTH-テレンスフーラハン

0
F1Linux