其实我想做一些类似的东西ifconfig.me功能,但仅适用于我的内部网络。我认为服务器上的某些东西侦听某个端口并发送连接的远程计算机的 IP 的方式。
似乎nc
对于我的问题来说是一个很好的实用程序(而且我在服务器上没有任何 php/python/任何东西。只有 shell 和标准 unix 工具)。
如果我从远程系统启动并连接到它,我可以看到远程 ip 和 dns 名称nc -vv
,但我找不到将它们发送到远程主机的方法。
或者也许我选择了太奇怪的路径并且还有另一个更简单的解决方案?
答案1
你可以使用这样的东西:
while true; do nc -lvp 1337 -c "echo -n 'Your IP is: '; grep connect my.ip | cut -d'[' -f 3 | cut -d']' -f 1" 2> my.ip; done
nc
将在带有详细选项的端口上以无限循环侦听的方式执行1337
,该选项会将有关远程主机的信息写入stderr
.stderr
被重定向到文件my.ip
.选项-c
允许nc
执行某些操作来“处理”连接。在这种情况下,我们接下来将从my.ip
文件中 grep 查找 IP 地址。
pbm@lantea:~$ curl http://tauri:1337
Your IP is: 192.168.0.100
答案2
while true; do nc -l -v 3333 2> status | while read msg; do ip=$(cat status | grep -o -P '(?<=from).*(?=port)') && notify-send "$ip" "$msg" -i gtk-network; done ; done
重定向标准错误到一个名为地位;然后它从文件中读取远程连接器的IP;最后在notify-osd消息中显示ip。
笔记:
当有人从另一台计算机连接到同一端口时数控通常将其放入 stderr: connection from 10.10.0.1 port 3333 [tcp/*] accepted
。我只是使用提取IP地址grep。