Ubuntu 可以向调制解调器或路由器查询其 ISP 提供的 IP 地址并记录下来吗?

Ubuntu 可以向调制解调器或路由器查询其 ISP 提供的 IP 地址并记录下来吗?

我通过 ADSL 调制解调器连接到互联网,我的 ISP 为我提供了一个 IP 地址,Ubuntu 是否在某处记录这个 IP 地址?

如何配置 Ubuntu 来记录 IP 地址?

答案1

记录你的电脑地址

如果您的调制解调器只是单纯的调制解调器,而您的 PC 直接连接到您的 ISP,那么它获取的 IP 地址将写入系统日志/var/log/syslog。如果您希望这些信息更容易提取,您可以将日志写入单独的文件。

如果你的 ISP 提供了 PPP 连接,那么脚本/etc/ppp/ip-up.d每次连接时(或者如果您有 IPv6 连接)都会执行/etc/ppp/ipv6-up.d。添加一个名为的脚本/etc/ppp/ip-up.d/zzz_log_ip_address

#!/bin/sh
echo "$PPP_LOCAL $(TZ=UTC date '+%Y-%m-%d %H-%M-%S')" >>/var/log/ip-addresses

如果您的 ISP 提供以太网连接,则脚本/etc/network/if-up.d每次连接时都会执行。添加一个名为的脚本/etc/network/if-up.d/zzz_log_ip_address

#!/bin/sh
if [ "$IFACE" = "lo" ]; then exit; fi # skip loopback interface
address=$(ip addr show eth1 | awk '$1 == "inet" {sub("/.*", "", $2); print $2}')
echo "$address $(TZ=UTC date '+%Y-%m-%d %H-%M-%S')" >>/var/log/ip-addresses

获取您的互联网地址

您的 PC 在本地网络上的地址可能不是您访问互联网时使用的地址,原因是NAT。NAT 允许网络上的许多机器从单个 IP 地址进行传出连接。许多 ADSL 调制解调器除了是调制解调器之外,实际上也是路由器和 NAT 设备。如果您的调制解调器提供 wifi,则几乎肯定是 NAT 设备。如果您的调制解调器允许多台计算机连接(其中一台计算机未设置为连接共享),则它就是 NAT 设备。

如果你的 PC 位于 NAT 后面,那么它唯一能知道其 Internet 地址的方法就是询问远程机器。许多公开的网站提供此信息的服务器。您可以随时检索此信息,但您不知道它何时更改。大多数 ISP 会不时更改您的 IP 地址,因为这有助于其设备中的负载平衡。这通常每天发生一次或每隔几天发生一次。

如果你想定期记录你的 IP 地址,你可以计划任务。请注意,如果您的地址在作业运行期间多次更改,您将无法知道。在您的 crontab 中:

0 * * * * $HOME/bin/log-ip-address

剧本~/bin/log-ip-address

#!/bin/sh
log_file=~/.ip-addresses.log
address=$(wget -q -O - http://ipecho.net/plain)
previous=$(awk 'END {print $1}' <"$log_file") 2>/dev/null
if [ "$address" != "$previous" ]; then
  echo "$address $(TZ=UTC date '+%Y-%m-%d %H-%M-%S')" >>"$log_file"
fi

根据您的路由器型号,它可能会记录它获取的 IP 地址,并且可能有办法让它将此信息发送到您的 PC。这在很大程度上取决于路由器型号,我无法提供任何一般性建议。

答案2

或者您可以自己动手,使用它curl来访问一些使用您的公共 IP 地址响应的在线服务。

部分服务:

例子:

curl icanhazip.com将输出到终端

curl icanhazip.com > my_public_ip.txtmy_public_ip.txt将创建或覆盖以 IP命名的 txt 文件。

curl icanhazip.com >> my_public_ip.txt每次运行该命令时都会附加公共 IP。

您可以创建一个小脚本来运行检查,甚至将其添加为 cron 作业,以便在每次机器重启时或在某些间隔内运行。

最简单的版本可能是:

#!/usr/bin/env bash

curl icanhazip.com >> my_public_ip.txt

相关内容