Mic*_*l K 1059
如果您不在路由器后面,则可以使用ifconfig.
如果您在路由器后面,那么您的计算机将不知道公共 IP 地址,因为路由器会进行网络地址转换。您可以询问一些网站您的公共 IP 地址正在使用什么,curl或者wget从中提取您需要的信息:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
Run Code Online (Sandbox Code Playgroud)
或更短
curl https://ipinfo.io/ip
Run Code Online (Sandbox Code Playgroud)
saj*_*i89 408
要查找外部 ip,您可以使用外部基于 Web 的服务,也可以使用基于系统的方法。更容易的是使用外部服务,而且ifconfig只有当您不支持NAT. 下面详细讨论了这两种方法。
最简单的方法是通过命令行浏览器或下载工具使用外部服务。由于wget在 Ubuntu 中默认可用,我们可以使用它。
要找到您的 IP,请使用-
$ wget -qO- https://ipecho.net/plain ; echo
Run Code Online (Sandbox Code Playgroud)
礼貌:
您还可以使用lynx(browser) 或curl代替wget上述命令的微小变化来查找您的外部 ip。
使用curl要查找IP:
$ curl https://ipecho.net/plain
Run Code Online (Sandbox Code Playgroud)
要获得更好的格式化输出,请使用:
$ curl https://ipecho.net/plain ; echo
Run Code Online (Sandbox Code Playgroud)
digwithOpenDNS作为解析器的更快(可以说是最快的)方法:这里的其他答案都通过 HTTP 传输到远程服务器。其中一些需要解析输出,或者依靠 User-Agent 标头使服务器以纯文本形式响应。他们也经常改变(下台、改名、张贴广告、可能改变输出格式等)。
- DNS 响应协议是标准化的(格式将保持兼容)。
- 从历史上看,DNS 服务(OpenDNS、谷歌公共 DNS 等)往往比今天流行的任何新的时髦 whatismyip.com HTTP 服务存活时间更长,更稳定、更可扩展并且通常得到照顾。
- (对于那些关心微优化的极客),这种方法本质上应该更快(可能只有几微秒)。
使用 dig 和 OpenDNS 作为解析器:
$ dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
Run Code Online (Sandbox Code Playgroud)
复制自: https : //unix.stackexchange.com/a/81699/14497
在终端中键入以下内容:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
在上文中,替换<interface_name>为您的实际接口的名称,如:eth0,eth1,pp0,等...
示例用法:
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
Run Code Online (Sandbox Code Playgroud)
在您的终端中键入以下内容(这将获取您系统中每个网络接口的名称和 IP 地址):
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
Run Code Online (Sandbox Code Playgroud)
示例用法:
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444
Run Code Online (Sandbox Code Playgroud)
注意:输出是指示性的而不是真实的。
礼貌: https : //www.if-not-true-then-false.com/2010/linux-get-ip-address/
更新
LANG=c已添加到ifconfig基于用法中,因此无论区域设置如何,它始终提供英文输出。Pan*_*her 135
我最喜欢的一直是:
curl ifconfig.me
Run Code Online (Sandbox Code Playgroud)
简单,易于打字。
您必须先安装 curl ;)
如果 ifconfig.me 已关闭,请尝试 icanhazip.com 或 ipecho.net
curl icanhazip.com
Run Code Online (Sandbox Code Playgroud)
或者
curl ipecho.net
Run Code Online (Sandbox Code Playgroud)
ypr*_*rez 65
icanhazip.com是我的最爱。
curl icanhazip.com
Run Code Online (Sandbox Code Playgroud)
您可以明确请求 IPv4:
curl ipv4.icanhazip.com
Run Code Online (Sandbox Code Playgroud)
如果你没有,curl你可以使用wget:
wget -qO- icanhazip.com
Run Code Online (Sandbox Code Playgroud)
小智 52
我发现一切都很烦人而且很慢,所以我写了自己的。它简单快捷。
它的 API 位于http://api.ident.me/
例子:
curl ident.me
curl v4.ident.me
curl v6.ident.me
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 51
您可以使用 DNS 请求而不是 HTTP 请求来找出您的公共 IP:
$ dig +short myip.opendns.com @resolver1.opendns.com
Run Code Online (Sandbox Code Playgroud)
它使用resolver1.opendns.comdns 服务器将神奇的myip.opendns.com主机名解析为您的IP 地址。
Cir*_*郝海东 31
亚马逊AWS
curl https://checkip.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
示例输出:
123.123.123.123
Run Code Online (Sandbox Code Playgroud)
也适用于浏览器:http : //checkip.amazonaws.com
我喜欢它因为:
jfl*_*mme 19
我正在使用的是:
wget -O - -q icanhazip.com
Run Code Online (Sandbox Code Playgroud)
是的,你可以拥有 ip :-)
小智 13
准确地输入这个,按Enter指示的地方:
telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter
这将手动提交一个 HTTP 请求,它将在底部返回您的 IP HTTP/1.1 200 OK reply
示例输出:
$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit
HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html
f
111.222.333.444
0
Run Code Online (Sandbox Code Playgroud)
小智 12
为此,发明了STUN。作为客户端,您可以向公开可用的 STUN 服务器发送请求,并让它返回它看到的 IP 地址。有点低级的 whatismyip.com,因为它不使用 HTTP 和精心制作的 DNS 服务器,而是使用极快的 STUN 协议。
stunclient如果您已经stunclient安装(apt-get install stuntman-client在 debian/ubuntu 上),您可以简单地执行以下操作:
$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
Run Code Online (Sandbox Code Playgroud)
哪里A.B.C.D是您的机器在本地网络W.X.Y.Z上的 IP 地址,是从外部看到的网站(以及您正在寻找的)之类的 IP 地址服务器。使用sed您可以将上面的输出减少到只有一个 IP 地址:
stunclient stun.services.mozilla.com |
sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"
Run Code Online (Sandbox Code Playgroud)
但是,您的问题是如何使用命令行找到它,这可能不包括使用 STUN 客户端。所以我想知道...
bash甲STUN请求可以手工使用发送到外部STUN服务器netcat,并使用被处理后dd,hexdump和sed像这样:
$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
nc -u -w 2 stun.services.mozilla.com 3478 |
dd bs=1 count=4 skip=28 2>/dev/null |
hexdump -e '1/1 "%u."' |
sed 's/\.$/\n/'
Run Code Online (Sandbox Code Playgroud)
回声定义了一个二进制 STUN 请求(0x0001 表示绑定请求),长度为 8(0x0008),带有 cookie 0xc00cee 和一些来自wireshark 的粘贴内容。只有代表外部 IP 的四个字节是从答案中取出、清理和打印的。
工作,但不推荐用于生产用途:-)
PS 许多 STUN 服务器可用,因为它是 SIP 和 WebRTC 的核心技术。使用 Mozilla 的一个应该是安全的隐私保护,但您也可以使用另一个:STUN 服务器列表
小智 8
我通过 telnet 提供了一个愚蠢的服务。像这样的东西:
telnet myip.gelma.net
Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx
Run Code Online (Sandbox Code Playgroud)
随意使用它。
您可以仅使用 bash 读取网页,而无需curl, wget:
$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
echo 'GET /' >&3 && # send http 0.9 request
read -u 3 && echo $REPLY && # read response
exec 3>&- # close fd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1502491 次 |
| 最近记录: |