AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1167229
Accepted
Boris
Boris
Asked: 2024-10-30 16:21:50 +0800 CST2024-10-30 16:21:50 +0800 CST 2024-10-30 16:21:50 +0800 CST

如何获取当前机器的全局IPv6地址?

  • 772

我有一个 bash 脚本,我想获取给定网络适配器(在我的情况下为“ens18”)的全局 IPv6 地址。首先,我发出了以下命令:

ip -6 addr

这给了我以下输出,其中包含我正在寻找的地址:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fd00::3170:4ff:eff4:a4ab/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 6736sec preferred_lft 3136sec
    inet6 2a02:8070:2982:4300:3170:4ff:eff4:a4ab/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 6736sec preferred_lft 3136sec
    inet6 af60::3170:4ff:eff4:a4ab/64 scope link 
       valid_lft forever preferred_lft forever
3: br-7ac197bd041e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 
    inet6 af60::42:80ff:fe52:3481/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 
    inet6 af60::42:6eff:fecf:5e6/64 scope link 
       valid_lft forever preferred_lft forever
6: veth074f8b0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 
    inet6 af60::7073:40ff:fe59:aad0/64 scope link 
       valid_lft forever preferred_lft forever
8: vethe85ed67@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 
    inet6 af60::5c09:65ff:fe34:34f4/64 scope link 
       valid_lft forever preferred_lft forever

因此全局 IPv6 地址为“2a02:8070:2982:4300:3170:4ff:eff4:a4ab”。

如何从我的 bash 脚本中可靠地检索该值?

bash
  • 2 2 个回答
  • 73 Views

2 个回答

  • Voted
  1. Best Answer
    Archemar
    2024-10-30T16:57:22+08:002024-10-30T16:57:22+08:00

    我会先

    ip -6 addr ls -deprecated primary dev ens18 scope global | awk '/inet6/{print $2}'
    

    在哪里

    • dev ens18告诉ip仅查询ens18
    • -deprecated(放在ls或之后show)过滤临时传出的 IP
    • primary选择主要的(例如分配给接口的第一个 IP)
    • scope global仅打印全局地址(不会打印链接级地址fe80::)
    • /inet6/告诉 awk 过滤行inet6
    • { print $2}打印值

    请注意,ipv6 类似于fe80::本地fd00::和站点地址(这些被标志过滤掉scope global)。


    一个更符合 21 世纪的解决方案是

    ip --json addr ${OTHER_ARGS} |
      jq -r '.[].addr_info[] |
             select(.scope == "global") |
             select(.family == "inet6") |
             .local'
    

    (${OTHER_ARGS}来自上面 awk 的解决方案)

    • 2
  2. Nikita Kipriyanov
    2024-10-30T21:25:46+08:002024-10-30T21:25:46+08:00

    我想说的是,您无需解析ip输出或依赖类似js(需要安装)的工具,而是可以从输出开始,hostname -I输出仅显示分配给机器的所有 IP 地址的列表。像这样:

    for i in `hostname -I`; do if echo ${i} | grep -qv \\. ; then echo ${i}; break; fi done
    

    这将显示列表中出现的第一个 IPv6 地址,即使它是链路本地或站点本地。您也可以通过 grep 查找它们:

    for i in `hostname -I`; do if echo ${i} | grep -qvP "\.|^fe80:|^fd00:" ; then echo ${i}; break; fi done
    
    • 0

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve