收起左侧

lucky通过网卡获取5个IP,怎么自动识别真实IPV6?

8
回复
556
查看
[ 复制链接 ]

3

主题

24

回帖

0

牛值

江湖小虾

2025-3-27 22:36:23 显示全部楼层 阅读模式
悬赏1飞牛币已解决

[i=s] 本帖最后由 huaxeng 于 2025-3-31 02:26 编辑 [/i]<br /> <br />

最近我的飞牛总是莫名失联,我是使用lucky的DDNS,发现通过网卡获取到了5个IP,怎么自动识别真实IPV6呢?回家研究了几天发现以下症状,麻烦大神们指点一下。 1:使用通过接口获取的是短IP,区域网内还行,断开WIFI就连不上了。 2:记得之前是两个,前几天还只有3个ip,今天就变成5个了。 3:昨天使用2号IP能用,今天又不行了,变成5号能用了。 4:本以为是最下面的IP能用,可实际又不是。

ipv6.png

目前暂时使用指令获取的方式解决,看看后续如何,以下是我使用的自定义指令,有需要的可以直接用

“ip addr show enp8s0|grep -v deprecated|grep -A1 'inet6 [^f:]'|grep -v ^--|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .? valid_lft ([0-9]+sec) .#\2 \1#p;Ta'|sort -nr|head -n1|cut -d' ' -f2”

附件: 您需要 登录 才可以下载或查看,没有账号?立即注册
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

7

主题

18

回帖

0

牛值

江湖小虾

2025-3-27 22:36:24 显示全部楼层

用ds写的脚本来获取地址就行了,改改网口名字:

#!/bin/bash

# 设置你的网络接口名(如 eth0、ens33 等)
INTERFACE="eth0"

# 获取符合条件的 IPv6 地址并按长度排序
LONGEST_IPV6=$(ip -6 addr show dev $INTERFACE | \
  grep 'inet6' | \
  awk '{print $2}' | \
  grep -v '^fe80' | \
  cut -d'/' -f1 | \
  awk '{ print length, $0 }' | \
  sort -nr | \
  head -1 | \
  awk '{print $2}')

# 输出结果(或传递给Lucky)
echo "检测到的最长IPv6地址:$LONGEST_IPV6"

10

主题

36

回帖

0

牛值

fnOS系统内测组

2025-3-27 23:17:18 显示全部楼层
使用ddnsgo里面有个设置可以识别可用ipv6

1

主题

752

回帖

0

牛值

社区共建团

社区共建团荣誉勋章飞牛百度网盘玩家

2025-3-28 08:37:10 显示全部楼层
你这是光猫或者路由器重启了,旧IPv6地址没有及时释放吧。你用接口获取ipv6吧。
不行,文中也说了,不知道什么原因用接口获取的ipv6是短IP,就是网卡的第一个ip,只能在区域网内才联得上,手机网络换成移动就连不上了  详情 回复
2025-3-31 02:21
冬眠~Connection refused.

0

主题

5

回帖

0

牛值

江湖小虾

2025-3-28 12:19:13 显示全部楼层
直接用接口获取

0

主题

76

回帖

0

牛值

初出茅庐

2025-3-28 21:47:10 显示全部楼层

我现在是通过脚本获取的,截图如下

工作原理是优先逐个从多个网络接口获取(用循环代码遍历网络接口会出错,只能逐个获取,这会显得代码臃肿),当都失败后再通过网卡获取公网IPV6地址,多个公网IPV6地址则获取最后一个,脚本代码如下:

#!/bin/bash

# 依次尝试各个 URL 获取 IPv6 地址
result=$(curl -s --max-time 5 "http://v6.666666.host:66/ip")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "http://myip6.ipip.net")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "http://v6.66666.host:66/ip")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://6.ipw.cn")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://ipv6.ddnspod.com")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://6.666666.host:66/ip")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://ipv6.icanhazip.com")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://api64.ipify.org")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://ident.me")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi

result=$(curl -s --max-time 5 "https://speed.neu6.edu.cn/getIP.php")
if [ $? -eq 0 ]; then
    ipv6=$(echo "$result" | grep -oE '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}')
    if [ -n "$ipv6" ]; then
        echo "$ipv6"
        exit 0
    fi
fi
# 获取所有 IPv6 地址,过滤掉链路本地地址和本地回环地址
ipv6_addresses=$(ip -6 addr | grep -P 'inet6 [^f]' | awk '{print $2}' | cut -d/ -f1 | grep -v '::1')

if [ -n "$ipv6_addresses" ]; then
    last_ipv6=$(echo "$ipv6_addresses" | tail -n 1)
    echo "$last_ipv6"
    exit 0
fi
echo "获取公网IPV6地址失败"
exit 1

为了减少网卡公网地址过多,我还在计划任务里加入定时重启网卡功能(每8个小时):

image.png

具体脚本代码如下,代码上有注释很方便理解

#!/bin/bash

# 获取所有网卡名称,并过滤掉虚拟网卡
network_interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -Ev '^(lo|docker|veth|br-|wlp)')

# 检查是否有符合条件的网卡
if [ -z "$network_interfaces" ]; then
    echo "未找到需要重启的物理网卡。"
    exit 0
fi

# 循环重启每个物理网卡
for interface in $network_interfaces; do
    echo "[$interface]网卡: "
    # 关闭网卡
    ip link set dev "$interface" down
    if [ $? -eq 0 ]; then
        echo "已关闭,"
    else
        echo "关闭失败,"
        continue
    fi
    # 等待一段时间,确保网卡完全关闭
    sleep 2
    # 启动网卡
    ip link set dev "$interface" up
    if [ $? -eq 0 ]; then
        echo "已启动!"
    else
        echo "启动失败!"
    fi
done

最后我的操作就这样,当然这些脚本代码是通过我用AI模型帮我写的,然后通过我一些浅薄的知识修整下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有点麻烦,lucky支持自定义指令获取,目前只能用指令解决了,代码我稍后会写上  详情 回复
2025-3-31 02:28

3

主题

24

回帖

0

牛值

江湖小虾

2025-3-31 02:21:52 楼主 显示全部楼层
memory_clear 发表于 2025-3-28 08:37
你这是光猫或者路由器重启了,旧IPv6地址没有及时释放吧。你用接口获取ipv6吧。 ...

不行,文中也说了,不知道什么原因用接口获取的ipv6是短IP,就是网卡的第一个ip,只能在区域网内才联得上,手机网络换成移动就连不上了
这个通过接口获取的IPV6的工作原理跟我上面的脚本代码是一样的,就是通过网站获取到你公网的IPV6地址,这是你暴露在网络的地址,可以肯定是这个地址是正确的,是你的公网IP地址,能暴露到让网站获取到,说明网络是通的,如  详情 回复
2025-4-2 06:00

3

主题

24

回帖

0

牛值

江湖小虾

2025-3-31 02:28:38 楼主 显示全部楼层
流氓丶R 发表于 2025-3-28 21:47
[md]我现在是通过脚本获取的,截图如下

工作原理是优先逐个从多个网络接口获取(**用循环代码遍历网络接口会 ...

有点麻烦,lucky支持自定义指令获取,目前只能用指令解决了,代码我稍后会写上

0

主题

76

回帖

0

牛值

初出茅庐

2025-4-2 06:00:03 显示全部楼层
huaxeng 发表于 2025-3-31 02:21
不行,文中也说了,不知道什么原因用接口获取的ipv6是短IP,就是网卡的第一个ip,只能在区域网内才联得上 ...

这个通过接口获取的IPV6的工作原理跟我上面的脚本代码是一样的,就是通过网站获取到你公网的IPV6地址,这是你暴露在网络的地址,可以肯定是这个地址是正确的,是你的公网IP地址,能暴露到让网站获取到,说明网络是通的,如果你访问不了有很大可能是你光猫或者路由器设置不当导致只能出站不能入站,比如防火墙拦截了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则