我如何找到我的内部IP地址?


208

我已经安装了Ubuntu服务器12.04,所以没有GUI。当我执行命令ifconfig时,我找不到我的IP地址。它说inet addr:127.0.0.1。

这是输出ifconfig -a

eth0   link encap:Ethernet  HWaddr 00:06:4f:4a:66:f0
    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)

eth1   link encap:Ethernet  HWaddr 00:16:ec:05:c8:9c 
    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)

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:65536  Metric:1
    RX packets:1800 errors:0 dropped:0 overruns:0 frame:0
    Tx packets:1800 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:143896 (143.b KB)  TX bytes:143896 (143.8 KB)

这是etc / network / interfaces的内容:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

如果有人可以为我编辑此文件,则etc / network / interfaces的内容应放在单独的行上。

主机askubuntu.com的输出为:

;; connection timed out; no servers could be reached.

几个月前,我设置了owncloud和webmin,并使用了一个月,没有任何问题。我认为两个月前的一天电源关闭,直到昨天我才重新打开服务器电源。我没有做任何会影响互联网设置的事情,所以我不确定为什么它不再起作用了。就我的网络拓扑而言,我有用于PC的pci-e网卡。以太网线从网卡连接到交换机,然后从那里连接到调制解调器/路由器。


1
@AvatarParto这些是面向公共访问的接口,这个问题是关于内部网络的……
Bruno Pereira

出于好奇,里面/etc/network/interfaces有什么?
Powerlord 2014年

我知道如何使用更改目录命令,但是我不知道如何在那里列出文件,我该怎么做?
卡琼斯2014年

ls将列出目录中的文件。ls -l将给出详细的清单。要列出特定目录的内容,ls -l /etc/network。更改为目录并列出目录cd /etc/network ;ls -l。读取etc/network/interfaces(这是一个文件)的内容sudo pico /etc/network/interfaces。(pico是一款轻量级的文本编辑器-适用于阅读和基本编辑,比vi。少吓人。)
douggro

Answers:


205

这些命令将告诉您所有网络信息

ip add

要么

ifconfig -a

如果如您所说,它只给您127.0.0.1,那么有两个选择:

  1. 您的网卡未连接或未被系统识别

  2. 您的网络DHCP服务器未运行或未连接


当我登录时告诉我有一些升级或更新,因此我认为必须与ubuntu官方网站进行交谈才能知道它具有更新,所以我认为我的互联网正在运行。
卡琼斯2014年

@Skateguy尝试打开askubuntu.com,请打印所有ifconfig -a
kamil

我没有GUI,不过我要输入它。
琼斯

1
我该如何回答您的两个选择提出的问题?
凸轮琼斯

1
我建议ip选择该选项,然后再建议(不推荐使用)。ifconfig
坎帕

212
hostname -I

这将为您提供IP地址,而无需任何其他信息。


16
那很完美。这么多过于复杂(但不是很差)的答案..这简直是死了。
user1003916

3
完美的答案.. :)
john400 '16

2
根据手册页:`-I,--all-ip-addresses显示主机的所有网络地址。此选项将枚举所有网络接口上的所有已配置地址。省略了环回接口和IPv6链接本地地址。因此,这将为您提供连接到的网络上的IP地址,如果您将其用作以太网或lxd服务器,还将为您的计算机提供IP。就我而言,它给出了两个地址,因为我有lxd:192.168.0.78和10.0.3.1
Sergiy Kolodyazhnyy

6
是的 就我而言,这更糟糕,10.0.2.15 172.18.0.1 172.17.0.1 172.20.0.1 172.21.0.1 172.22.0.1 172.19.0.1因为我正在运行一些Docker容器;)
Alex

4
投票,因为其他解决方案无效,例如在原始
docker

185

这是我目前建议的内容:

ip route get 8.8.8.8 | awk '{print $NF; exit}'

该命令的优点是您不必知道正在使用哪个接口(eth0?eth1?或wlan0?),也不必过滤掉本地主机地址,Docker地址或VPN隧道等。并且在那一刻您将始终获得当前用于Internet连接的IP地址(例如,当您同时连接以太网和wifi或通过VPN等时,这一点很重要)。

这不仅会测试您是否在某个接口上配置了正确的IP(例如解析的输出ifconfig),还测试了路由表是否已配置为正确使用它。

我发现这个想法此答案科林·安德森

在GitHub上我的脚本集合中的internalip脚本中使用了该脚本,可以使用以下命令进行安装:

wget https://rawgit.com/rsp/scripts/master/internalip
chmod a+x internalip

并用作:

internalip

要么:

internalip TARGET

然后您将获得用于与TARGET IP地址连接的IP地址。缺省的目标是8.8.8.8这是谷歌的公共DNS解析器和良好的默认互联网。

但是,如果您使用其他IP运行它:

internalip 127.2.3.4

然后您将获得:

127.0.0.1

因为这是您的IP地址,可用于在回送接口上与127.2.3.4连接。当目标位于LAN,VPN或其他特殊网络上时,此功能很有用,在这种情况下,可以使用除默认IP以外的其他IP来连接Internet。

外部IP

要检查您的外部 IP地址(连接到Internet时服务器在Internet上看到的地址-可能与此处描述的内部IP地址不同),请参见此答案


1
这是一个了不起的答案,谢谢!救了我这么多头疼!:D
user65165

这是一个有用的技巧,但是OP询问的是内部IP,所以要确定它可以路由到8.8.8.8并不安全。
mc0e 2015年

@ mc0e好点。这就是为什么我的脚本为其他IP使用可选参数的原因- 8.8.8.8只是默认值。在我的回答中,我127.2.3.4举了一个例子。您可以在Intranet或VPN上使用某些IP。关键是您通常没有一个内部IP地址,但很少有用于不同目标的不同IP地址。这样,您可以找到实际用于连接到给定目标的对象。
rsp 2015年

1
大家知道,这为Mac提供了外部IP。
OZZIE

19

我认为值得一提的是,将ifconfig与-a选项一起运行将显示所有接口(无论接口是否具有IP)。

仅运行ifconfig,将仅显示已分配IP的接口。

这是一个很好的技巧,您可以使用它使用Perl仅显示IP。

# ifconfig | perl -nle'/dr:(\S+)/ && print $1'
192.168.1.100
127.0.0.1

您的网卡已被系统识别,因此其显示eth0和eth1的原因

这是为接口分配IP的快速方法,请相应地使用有效的IP /子网。

 ifconfig eth0 192.168.1.200/24 up 

那么我们需要添加一条默认路线

route add default gw 192.168.1.1

最好,


1
我会尝试这种方法,但是您将不得不对其进行分解,以便我理解它,例如如何查找或知道有效的IP,子网和有效的默认路由。
卡琼斯2014年

这是网络接口的静态IP分配,这意味着如果您位于子网为192.168.1.0/24的路由器后面,则可以ping ip ex。192.168.1.200,如果没有响应,则转头使用ifconfig interface_name IP_ADDRESS / MASK up分配IP后,需要添加默认gw。
user1007727 2014年

8

此命令将显示单个设备的所有IP地址:

dev=eth0
ip addr show $dev | awk '/inet/ {print $2}' | cut -d/ -f1

它将打印一两行输出。如果您的系统配置为支持inet / IPv4地址,则第一个为inet6 / IPv6地址。


6

万一该ifconfig命令没有显示IP地址,则有一种非常简单的方法可以通过GUI查找Ubuntu计算机的IP地址。请按照以下步骤操作:

单击通知区域中的网络图标,然后单击“ 连接信息”网络图标选项

这将打开一个窗口,其中包含一些信息,包括IP地址。 IP地址信息


1

有很多在这里很好的答案,从已经选择,但我想我会指出facter通常是,但不一定与木偶用于收集有关系统的各种事实。facter的主要优点是,它提供了干净的输出,节省您的所有操作grepsedawkcutperl,等它不会告诉你,你有兴趣在哪一个接口,但如果你知道,那么以下内容为您提供了无需其他技巧即可清理的IP:

facter ipaddress_eth0 

1

ip命令

这是变化的ip addr方式。

ip具有-o允许将所有信息放在一行上的选项-这对于使用awk或这类工具进行解析非常有用perl。与-4option 结合使用时,我们只会看到IPv4地址。因此,输出将是这样的(注意-将wlan7替换为您要检查的接口):

$ ip -4 -o addr show wlan7
3: wlan7    inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic wlan7\       valid_lft 85654sec preferred_lft 85654sec

如您所见,IP地址是输出中的第4列/字。其余的,是通过您选择的工具进行的简单解析练习。在这里,我正在使用python:

ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 

一样,只是在这里用字符串<<<和命令替换$()

python -c "import sys;print sys.stdin.readlines()[0].split()[3]"  <<< $(ip -4 -o addr show wlan7)

就个人而言,我将其保存为一个不错的函数,~/.bashrc从而减少了打字的过程。

wlan_ip() {
    ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 
} 

Perl和Ruby的版本短一些:

$ ip -4 -o addr show  wlan7 | perl -lane 'print $F[3]'                         
192.168.0.78/24

$ ip  -4 -o addr show wlan7 | ruby -n -e 'print $_.split()[3]'                 
192.168.0.78/24

Wireshark

如果您熟悉使用网络分析工具,则可能知道要获取IP地址,您需要做的就是清除浏览器缓存,在特定界面上启动Wireshark捕获,并查找GET正在传输的http 数据包。目标列将显示您的IP地址

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.