【问题标题】:Get my public IP using netcat使用 netcat 获取我的公共 IP
【发布时间】:2011-05-14 06:51:57
【问题描述】:

我有一个非常基本的 Linux 服务器,在 IP 摄像机 (Busybox) 上运行。我想获取该摄像机的公共 IP,它位于路由器后面。 它没有“wget”也没有“traceroute”,“ping”只是回答“alive”或“not alive”...

唯一可用的是基本的“netcat”:

nc
BusyBox v1.1.3 (2009.12.07-16:16+0000) multi-call binary
Usage: nc [OPTIONS] [IP] [port]
Netcat opens a pipe to IP:port
Options:
        -l              listen mode, for inbound connects
        -p PORT         local port number
        -i SECS         delay interval for lines sent
        -w SECS         timeout for connects and final net reads
        -4              Use IPv4 (default)
        -6              Use IPv6
        -D DSCP         set IP DSCP field
        -P PRIO         set VLAN user-priority

如果我的 ISP 允许传出 HTTP,是否可以使用 netcat 从 www.obtainip.com 或类似网站获取公共 IP 响应?

非常好,非常感谢你们两个,因为我对 nc 一点都不满意。

这里有两种工作方式:

echo "GET /automation/n09230945.asp HTTP/1.0" > http_req2.txt
echo "Host: www.whatismyip.com" >> http_req2.txt
echo "" >> http_req2.txt
echo "" >> http_req2.txt
IP2=$(cat http_req2.txt | nc www.whatismyip.com 80 | tail -n 1)
echo $IP2
YEAH !

还有更奇怪的,但是......它也有效:

echo "GET / HTTP/1.0" > http_request.txt
echo "Host: www.whatismyip.com" >> http_request.txt
echo "User-Agent: netcat" >> http_request.txt
echo "Referer: http://www.whatismyip.com/" >> http_request.txt
echo "" >> http_request.txt
echo "" >> http_request.txt
IP=$(cat http_request.txt | nc www.whatismyipaddress.com 80 | tail -n 1)
echo $IP
YEAH again!

编辑 当然,这可以像建议的那样更好地编写脚本:

echo -e "GET /automation/n09230945.asp HTTP/1.0\n"Host: www.whatismyip.com\n\n" | nc www.whatismyipaddress.com 80 | tail -n 1

【问题讨论】:

  • 嗯,我无法安装 wget 或 curl,否则我会喜欢这样做。

标签: ip public netcat


【解决方案1】:

由于 whatismyip.com 的自动化程度下降,这里有一个替代方案:

$ echo GET / | nc icanhazip.com 80

...这将输出你的IP。

【讨论】:

  • 酷。这可能是单线echo GET /|nc icanhazip.com 80
  • 更新为只使用 curl。
  • 问题是如何使用netcat获取外部IP,而不是curl。
  • 哈,这就是我在 2 年后没有阅读问题而更新答案的结果。更新为使用您的简化版本@avalanchy
【解决方案2】:

创建一个名为“脚本”的文件

把这个放在内容里

GET /automation/n09230945.asp HTTP/1.0
Host: www.whatismyip.com

确保底部有 2 个空换行符(此编辑器不会显示它们)

然后运行

cat script | nc www.whatismyip.com 80 | tail -1

有你的ip...你可以把它放在一个变量中

IP=`cat script | nc www.whatismyip.com 80 | tail -1`
echo $IP

这将只返回 IP 地址,不用大惊小怪

【讨论】:

  • 这对我不起作用。我创建了具有适当内容的script 文件(包括底部的两个空行)。但是cat script | nc www.whatismyip.com 80 | tail -1 什么也没打印。如果我将其简化为 cat script | nc www.whatismyip.com 80,它仍然什么也不打印。
  • whatismyip 的自动化已关闭,请改用:nc icanhazip.com 80,然后是 GET /。
【解决方案3】:

您可以使用 netcat 发送有效的预设 HTTP 请求:

命令

cat httpreq.txt | nc www.whatismyip.com 80

httpreq.txt(确保文件以至少两个空行结束)

GET / HTTP/1.0
Host: www.whatismyip.com
User-Agent: netcat
Referer: http://www.whatismyip.com/


<<don't forget your blank lines above here>>

...但是您仍然需要一些机制来解析 HTTP 响应。

即使您可以找到“我的 IP 是什么”Web 服务,它仅以纯文本形式返回未经修饰的 IP 地址(使您不必解析 HTML),您仍然需要解析 HTTP 响应标头。

你有什么工具可以让你做一些字符串解析?重击?赛德?怎么了?

编辑:看起来像superfro found a plain-text“我的 ip 是什么”服务,以及解析 HTTP 响应标头的简单方法。

【讨论】:

  • 是的,我有 tail、sed 和 grep 可用,但没有 awk。我还可以使用 telnet 进行 bash 脚本编写。令人惊讶的是,我直接使用它时收到错误 500,但我获得了公共 IP,将带有 nc 的 httpreq.text 保存到 www.whatismyipaddress.com,就像这样:cat http_request.txt GET / HTTP/1.0 主机: www.whatismyip.com 用户代理:netcat Referer:whatismyip.com IP=$(cat http_request.txt | nc www.whatismyipaddress.com 80 | tail -n 1)
  • 看看 superfro 的解决方案。既然你有尾巴。 :-)
  • 我想我宁愿保留你的,因为它看起来更通用,我担心这个“GET /automation/n09230945.asp”会消失几天。
  • @hornetbzz - 我认为没有任何理由害怕/automation/n09230945.asp URL。在该网站的论坛上多次提到它作为检索您的 IP 地址的替代方法。使用它将使解析 IP 地址变得更加容易。但是,使用你喜欢的和适合你的!
  • thx,事实上,我会在 shell 中编写脚本,然后我两次肯定会得到这个 IP,后来又避免想知道为什么我没有得到它 ;-) 许多 Thx 实际上再次你们每个人都非常有效和友善地帮助了我。
【解决方案4】:
(echo GET /; echo) |nc www.whatismyipaddress.com 80 | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

【讨论】:

    【解决方案5】:

    如果你的盒子上有sed,你可以试试

    echo -e "GET /automation/n09230945.asp HTTP/1.1\r\nHost: www.whatismyip.com\r\n" | nc -w1 www.whatismyip.com 80 | sed -ne '$p'
    

    【讨论】:

    • IP=$(echo -e "GET /automation/n09230945.asp HTTP/1.1\r\n主机:www.whatismyip.com\r\n" | nc -w1 www.whatismyip.com 80 | 尾 -1)
    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2011-03-07
    • 2011-09-11
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多