我通过 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.txt
my_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