通常,当我想检查给定计算机的外部 IP 地址时,我只需使用curl
某个外部网站向我发送响应,告诉我我的 IP 地址在其上显示的是什么。但是,我注意到ifconfig
也列出了我的外部 IP 地址。
网络上是否ifconfig
有某种“规范”源可以发送请求来确定计算机的 IP 地址,或者是否有其他方法来查找计算机的 IP 地址?
答案1
ifconfig
只是一个用于设置/获取网络接口当前组成的工具。当您运行它时,它只是将此信息返回给您。您可以使用它来查询所有设备或单个接口。
例子
单独的设备。
$ ifconfig lo
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6119 errors:0 dropped:0 overruns:0 frame:0
TX packets:6119 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8725156 (8.3 MiB) TX bytes:8725156 (8.3 MiB)
所有设备。
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:20 Memory:f2600000-f2620000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:45792 errors:0 dropped:0 overruns:0 frame:0
TX packets:45792 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7548353 (7.1 MiB) TX bytes:7548353 (7.1 MiB)
wlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1254848 errors:0 dropped:0 overruns:0 frame:0
TX packets:1408361 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:699671476 (667.2 MiB) TX bytes:347243164 (331.1 MiB)
/进程/网络
您可以操作的有关每个网络接口的信息都在文件系统ifconfig
下的 Linux 内核中公开/proc/net
。如果您查阅手册页,ifconfig
您会注意到这一部分:
FILES
/proc/net/socket
/proc/net/dev
/proc/net/if_inet6
这些文件包含一些网络信息。下面/proc/net
还有其他文件。
ifconfig、ip 的替代品
还有一个名为 的替代工具ip
,您也可以使用它来操作网络信息。
$ ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
联网信息
IP地址等信息可以是静态设置的,也可以是动态设置的。静态设置时,您通常可以使用该工具ifconfig
为特定网络设备设置 IP 地址,例如eth0
、 或wlan0
。
另一种方法是动态设置 IP 信息,使用称为 DHCP 的服务,该服务是计算机可以连接到的网络上的服务器,要求 DHCP 服务器为其分配 IP 地址。
无论哪种情况,网络信息一旦确定,都可以在 下访问/proc/net/*
。
答案2
配置外部地址是 的工作ifconfig
。它只是读取将地址写入其中的内核数据结构。即使您的计算机与网络断开连接,它也能正常工作。 ifconfig
可以在计算机与网络隔离的情况下完整配置网络,如果配置正确,则只要连接网线,网络即可运行。
环回地址[127.0.0.1]是在软件设备上配置的,即使计算机中没有安装网卡,该软件设备也存在。这允许使用 TCP 和 UDP 等协议进行本地连接。这简化了软件开发,因为不需要为本地连接提供特殊服务。
编辑:ifconfig
通常不知道您是否配置了已在使用的 IP 地址。如果网络接口连接到互联网,则ARP
网络可以查看该地址是否正在使用。这不是必需的功能,ifconfig
并且多台计算机具有相同 IP 地址的情况并不罕见。如果ifconfig
或其他软件确定配置的地址不正确,通常的响应是发出警告消息。
也有可能ifconfig
为错误的网络配置设备。用户有责任确保提供的配置ifconfig
正确。还有其他工具可以执行相同的功能ifconfig
并应用相同的限制。
为专用网络定义了三个 IP 地址范围。分别是 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。在这些地址范围上配置计算机是很常见的。在这种情况下,他们的 IP 地址将不同于 Internet 上的“公共”IP 地址。 “公共”IP 地址将属于连接到 Internet 的设备,该设备执行网络地址转换 (NAT),以允许专用网络上的计算机与 Internet 进行通信。家庭网络上的计算机几乎总是有一个专用网络地址。大多数家庭路由器将为本地(专用)网络上的计算机执行 NAT。
答案3
如果您位于 NAT 之后,ifconfig 无法显示您的“外部”IP 地址。它仅配置 DHCP 服务器向您的网络接口提供的地址。如果您知道您的外部 IP 地址,您应该使用诸如https://ipof.in/txt。