3

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

唯一可用的是基本的“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
4

5 回答 5

4

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

$ echo GET / | nc icanhazip.com 80

...这将输出您的IP。

于 2013-10-30T06:27:43.490 回答
3

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

把这个放在内容中

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 地址,不用大惊小怪

于 2010-11-23T06:23:08.697 回答
2

可以使用 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 找到了纯文本“我的 ip 是什么”服务,以及解析 HTTP 响应标头的简单方法。

于 2010-11-23T06:16:10.593 回答
1
(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\}"
于 2012-03-21T17:09:19.553 回答
0

如果你的盒子上有 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'
于 2010-11-23T11:27:30.163 回答