用于获取IP地址的Shell命令?


Answers:



25

您可以使用:

/bin/ip addr

3
@opierce您已将mpbloch的答案标记为正确,但作为一个FYI,您应该使用此答案,因为这是iproute2套件的一部分。ifconfig正在分阶段进行。
jwbensley

3
您只需运行即可将其缩短ip a
gak 2013年

19

如果您正在使用内部地址,请检查

curl http://myip.dnsomatic.com

在Unix shell上可能是一个好主意。
或者,只需将该URL配置到浏览器中即可。


如果您从“ ifconfig -a”结果中得到的答案不同,则
输入ifconfig您的内部地址-可能无法从外部使用。


即使一切正常,您也可以安装防火墙,以禁止传入的ssh连接。
这时您应该从计算机上的浏览器尝试关注的端口,

http://www.canyouseeme.org/

这将通过以下方式确认连接,

  • 外部IP地址(在该页面上显示给您)
  • NAT,端口转发
  • 防火墙

没错,但是如果是这样,可能没有适当的NAT /端口转发规则将ssh与内部IP匹配。
凯尔·布​​兰特

@Kyle,可以添加...
nik

3
+1curl http://myip.dnsomatic.com
JatSing 2012年

与此相似,还有curl ifconfig.me
jwbensley 2013年

19

/bin/hostname -i


3
在这种情况下,我建议使用hostname --all-ip-addresses。显示主机的所有网络地址。此选项枚举所有网络接口上的所有已配置地址。省略了环回接口和IPv6链接本地地址。与选项-i相反,此选项不依赖于名称解析。不要对输出的顺序做任何假设。
lrkwz 2014年

5
@lrkwz评论的更短替代方法/bin/hostname -I
hanxue 2014年

谢谢@hanxue-这应该是它的答案-输出最干净的最短命令-正是我想要的!根据我的经验(Ubuntu),/bin/hostname -i只给出127.0.1.1,这是没有用的。
罗杰·迪克


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

如果需要内部地址,则在ifconfig之后附加接口,例如

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1,这正是解决问题所需要的。一线好客!
J. Polfer

+1没有头-1:/ sbin / ifconfig | grep inet | sed's / \:/ /'|
awk'NR

谢谢,它可以在Debian上运行,但不能在OS X上运行,返回一些垃圾。如果我们能提出一条对两者都适用的方法,那就太好了。这是OS X上ifconfig的输出:gist.github.com/ssbarnea/5814657
sorin 2013年


3

如果需要找出路由器的IP地址,可以运行此命令。

挖+短myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

如果您将dns服务器使用OpenDNS,则可以将其缩短为:

挖+短myip.opendns.com

您也可以使用此命令。

卷曲http://myip.dnsomatic.com

3

如果您有多个接口,则可以使用它来指定要使用哪个IP。如果要接口“ eth0”的IPV4地址:

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

如果要接口“ eth0”的IPV6地址:

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

如果要在笔记本电脑的两个常用接口wlan0和eth0之间搜索IP:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done


2

这是一条同样适用于Linux和OS X的行,它将返回非本地的第一个地址:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

发送积分到/programming//a/13322549/99834



1

最简单的方法可能是

ifconfig eth0

假设机器在默认的有线接口上有一个IP地址-您可能需要

ifconfig wlan0

如果在WiFi上。


1
ip address show scope link

它将向您显示居住的IP地址-具有链接-接口。但这不是bash命令。Bash根本不了解IP和网络。


1

我了解的是您要连接具有动态IP的远程ubuntu机器。前往dyndns.org网站并开设一个免费帐户。然后,在远程计算机上,您需要安装动态IP工具。

sudo aptitude install dyndns-client

所以你可以通过ssh远程机器

ssh username@yourdynamicnamealias.dyndns.org

因此,配置后,您将不再需要远程计算机的IP地址。


这是我处理动态IP的首选方法。dyndns.org是一项出色的免费服务。
约翰·巴雷特

1

这是我正在使用的:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

如果只需要给定接口的单个​​IP,则可以执行以下操作:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

如果您正在寻找盒子公共IP地址,则可以使用以下命令:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

您可以使用dig(1)类似-4或的选项-6来专门寻找IPv4或IPv6地址。Google将以TXT类型记录的形式提供答案,当由提供者提供时,其周围会带有引号dig。如果您想随后将变量与实用程序一起traceroute使用,则必须使用tr(1)之类的内容来删除引号。

其他选项包括whoami.akamai.netmyip.opendns.com,它们用AAAAA记录回答(而不是TXT上面的示例,来自Google),因此,它们不需要删除引号:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

这是一个示例脚本,该脚本使用上述所有选项来设置变量:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

如果你正在寻找一个私有IP地址,或一组分配给中的所有IP地址,你可以使用的某种组合ifconfig(在BSD和GNU / Linux), ip addr(在GNU / Linux), hostname(选件-i-I上GNU / Linux),netstat看看发生了什么。

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.