ddns-go icon indicating copy to clipboard operation
ddns-go copied to clipboard

通过命令获取IP参考

Open jeessy2 opened this issue 2 years ago • 84 comments

通过命令获取IP,可分享出自己的脚本,方便大家crtl+c crtl+v

jeessy2 avatar Feb 07 '23 15:02 jeessy2

  • 在Linux系统中获取网卡eth1的IPv6地址 ip -6 addr show eth1
  • 在Linux系统中获取网卡eth1的IPv4地址 ip -4 addr show eth1

jeessy2 avatar Feb 07 '23 15:02 jeessy2

  • Linux get IPv6 prefix (移动开头2409) ip -6 route | awk '{print $1}' | awk '/2409:?/' | awk -F::/ '{print $1 "any other suffix of other mac"}'

Camusama avatar Feb 07 '23 15:02 Camusama

请问有办法通过命令获取同局域网其他设备Ipv6吗?

solosing avatar Feb 20 '23 05:02 solosing

请问有办法通过命令获取同局域网其他设备Ipv6吗?

Linux get IPv6 prefix (移动开头2409) ip -6 route | awk '{print $1}' | awk '/2409:?/' | awk -F::/ '{print $1 "any other suffix of other mac"}' 把any other suffix of other mac改成其它设备的IPv6(EUI-64)后缀

jeessy2 avatar Feb 20 '23 05:02 jeessy2

Windows PowerShell获取ip

参阅微软文档根据网络环境自定义一些参数进行筛选

自用获取公网ipv6 Get-NetIPAddress -AddressFamily IPv6 -AddressState Preferred -SuffixOrigin Link -Type Unicast -PrefixOrigin RouterAdvertisement

qsrenl avatar Feb 26 '23 04:02 qsrenl

@jeessy2 目前匹配正则表达式只能按照顺序选择,大部分时候没问题,但偶尔会遇到一个问题。我这边网卡的IPV6地址,总是有2个地址,一个长一点的,一个短一点的。我发现只有长的才能用外网访问,短的没法访问。但是长的在前还是短的在前有些随机性。

比如这种: eth0(2409:8a60:1111:2222:20c:29ff:feea:b763, 2409:8a60:1111:2222::3b3),有时候又会变成 eth0(2409:8a60:1111:2222::3b3, 2409:8a60:1111:2222:20c:29ff:feea:b763)

请问能不能设个选项,固定选择长一点的那个,这样就不用选具体1或者2了,谢谢

flyegg avatar Mar 03 '23 07:03 flyegg

@jeessy2 目前匹配正则表达式只能按照顺序选择,大部分时候没问题,但偶尔会遇到一个问题。我这边网卡的IPV6地址,总是有2个地址,一个长一点的,一个短一点的。我发现只有长的才能用外网访问,短的没法访问。但是长的在前还是短的在前有些随机性。

比如这种: eth0(2409:8a60:1111:2222:20c:29ff:feea:b763, 2409:8a60:1111:2222::3b3),有时候又会变成 eth0(2409:8a60:1111:2222::3b3, 2409:8a60:1111:2222:20c:29ff:feea:b763)

请问能不能设个选项,固定选择长一点的那个,这样就不用选具体1或者2了,谢谢

ff:fe是长的那个?如果是直接正则表式中输入ff:fe

jeessy2 avatar Mar 03 '23 08:03 jeessy2

ff:fe

请问不需要输入@之类的符号吗?直接在匹配正则表达式栏里面填写ff:fe就可以了吗?

flyegg avatar Mar 03 '23 11:03 flyegg

请问不需要输入@之类的符号吗?直接在匹配正则表达式栏里面填写ff:fe就可以了吗?

应该可以

WaterLemons2k avatar Mar 03 '23 11:03 WaterLemons2k

不加。@是指定第几个,你这个是匹配字符串正则

jeessy2 avatar Mar 03 '23 12:03 jeessy2

不加。@是指定第几个,你这个是匹配字符串正则

谢谢,测试可以了。只要不换网卡的Mac,理论上最后几位地址应该不会变的。

同谢 @WaterLemons2k

flyegg avatar Mar 03 '23 12:03 flyegg

Linux 仅获取纯公网 IPv6 地址

  • ip

    ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}'
    
  • ifconfig

    ifconfig | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}'
    

    参考:https://superuser.com/a/1057290

  • dynv6

    ip -6 addr list scope global | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p
    

WaterLemons2k avatar Mar 03 '23 12:03 WaterLemons2k

MacOS下没有ip命令,可以使用ifconfig ifconfig en0 | grep inet ipv4&ipv6 ifconfig en0 | grep inet6 ipv6 ipconfig getv6packet en0

或者安装iproute2mac工具,就可以使用ip命令了

rehack avatar Mar 10 '23 05:03 rehack

ip -6 addr show dev eth0 | sed -n 's|^.inet6 ([^ ]/64).*$|\1|p' 选定/64ipv6

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /ca1a/ {print $3}' 选中尾号CA1A的ip

babyvox550 avatar Mar 17 '23 09:03 babyvox550

根据网卡地址查询 ip -6 n | grep ^2.*00:11:22:33:44:55 | tail -n 1 | awk '{print $1}'

kffnqtd avatar May 08 '23 13:05 kffnqtd

根据网卡地址查询 ip -6 n | grep ^2.*00:11:22:33:44:55 | tail -n 1 | awk '{print $1}'

kffnqtd avatar May 08 '23 13:05 kffnqtd

不加。@是指定第几个,你这个是匹配字符串正则

谢谢,测试可以了。只要不换网卡的Mac,理论上最后几位地址应该不会变的。

同谢 @WaterLemons2k

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

wcn666 avatar May 18 '23 01:05 wcn666

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

输出最长行:

awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

参考:https://www.baeldung.com/linux/print-longest-lines-in-file#using-theawk-command

WaterLemons2k avatar May 18 '23 01:05 WaterLemons2k

不加。@是指定第几个,你这个是匹配字符串正则

谢谢,测试可以了。只要不换网卡的Mac,理论上最后几位地址应该不会变的。 同谢 @WaterLemons2k

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

前四组2409:8a60:1111:2222这几位长得v6和短的v6地址都是一样的无法区分,后面的地址我看了一下记录。每次都不一样,不像上面的朋友有一个ff:fe是一直不变的,我就没办法用这个方法进行筛选。

wcn666 avatar May 18 '23 01:05 wcn666

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

输出最长行:

awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

参考:https://www.baeldung.com/linux/print-longest-lines-in-file#using-theawk-command

好的,我去试一下看看能否生效。

wcn666 avatar May 18 '23 01:05 wcn666

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

输出最长行:

awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

参考:https://www.baeldung.com/linux/print-longest-lines-in-file#using-theawk-command

您好,我的版本不支持命令获取,我是centos7.9,升级镜像的命令是什么呀,没看到有

wcn666 avatar May 18 '23 02:05 wcn666

您好,我的版本不支持命令获取,我是centos7.9,升级镜像的命令是什么呀,没看到有

Releases 下载并解压 ddns-go 就可以了。

WaterLemons2k avatar May 18 '23 02:05 WaterLemons2k

我也遇到了这个问题,长的v6地址可以访问,短位的不行,但是我v6地址对应你们说的后几位是一直在变动的,有没有什么办法选择映射长的这一个地址啊。

输出最长行:

awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

参考:https://www.baeldung.com/linux/print-longest-lines-in-file#using-theawk-command

好的,我去试一下看看能否生效。 最新版镜像,,命令获取提示这个 获取IPv6结果失败! 命令:/bin/bash -rc awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }',标准输出:"" 2023/05/18 10:46:01 未能获取IPv6地址, 将不会更新

wcn666 avatar May 18 '23 02:05 wcn666

最新版镜像,,命令获取提示这个 获取IPv6结果失败! 命令:/bin/bash -rc awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }',标准输出:"" 2023/05/18 10:46:01 未能获取IPv6地址, 将不会更新

请将输出通过管道传入 awk 才能输出最长行。

例如 Linux 仅获取纯公网 IPv6 地址

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

WaterLemons2k avatar May 18 '23 02:05 WaterLemons2k

最新版镜像,,命令获取提示这个 获取IPv6结果失败! 命令:/bin/bash -rc awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }',标准输出:"" 2023/05/18 10:46:01 未能获取IPv6地址, 将不会更新

请将输出通过管道传入 awk 才能输出最长行。

例如 Linux 仅获取纯公网 IPv6 地址

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

十分感谢,已经成功输出最长的ip地址。

wcn666 avatar May 18 '23 02:05 wcn666

最新版镜像,,命令获取提示这个 获取IPv6结果失败! 命令:/bin/bash -rc awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }',标准输出:"" 2023/05/18 10:46:01 未能获取IPv6地址, 将不会更新

请将输出通过管道传入 awk 才能输出最长行。

例如 Linux 仅获取纯公网 IPv6 地址

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

您好,我又遇到一个问题 在我的群晖上输出的最长地址为fd7a开头的非公网v6地址,如何可以限制为240开通的最长地址啊

wcn666 avatar May 18 '23 03:05 wcn666

您好,我又遇到一个问题 在我的群晖上输出的最长地址为fd7a开头的非公网v6地址,如何可以限制为240开通的最长地址啊

先看一下 Linux 仅获取纯公网 IPv6 地址 输出的是什么:

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}'

WaterLemons2k avatar May 18 '23 03:05 WaterLemons2k

您好,我又遇到一个问题 在我的群晖上输出的最长地址为fd7a开头的非公网v6地址,如何可以限制为240开通的最长地址啊

先看一下 Linux 仅获取纯公网 IPv6 地址 输出的是什么:

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}'

输出的是 更新域名解析 成功!IP: 2408:826a:1c80:5a31::db9 2023/05/18 11:06:31 更新域名解析 成功!IP: 2408:826a:1c80:5a31::db9

但是我从网卡获取的话 还有一个更长的地址为 image

wcn666 avatar May 18 '23 03:05 wcn666

输出的是 更新域名解析 成功!IP: 2408:826a:1c80:5a31::db9 2023/05/18 11:06:31 更新域名解析 成功!IP: 2408:826a:1c80:5a31::db9

但是我从网卡获取的话 还有一个更长的地址为 image

~使用 $3 ~ /^fd7a::/ { next;} 跳过输出 fd7a:: 开头的 IPv6 地址:~

~shell~ ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} $3 ~ /^fd7a::/ { next;} /inet6/ {print $3}' | awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }' ~~

使用 $3 ~ /^fd7a:/ { next;} 跳过输出 fd7a: 开头的 IPv6 地址:

ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} $3 ~ /^fd7a:/ { next;} /inet6/ {print $3}' | awk '{ln=length}ln>max{delete result; max=ln}ln==max{result[NR]=$0}END{for(i in result) print result[i] }'

WaterLemons2k avatar May 18 '23 03:05 WaterLemons2k

此命令还是输出fd7a地址

2023/05/18 11:24:41 你的IP fd7a:115c:a1e0:ab12:4843:cd96:6262:587f 没有变化,

wcn666 avatar May 18 '23 03:05 wcn666