用bash特有的文件系统/dev/tcp建立tcp连接示例

用bash特有的文件系统/dev/tcp建立tcp连接示例

原创2023-03-24 09:26·Inspiration

在Bash中,/dev/tcp是一个特殊的文件系统,可以使用简单的重定向来建立TCP/IP连接。

文件名格式:

/dev/tcp/<ip>/<端口>

以下是如何在Bash中使用/dev/tcp的一些示例:

  1. 检查远程端口是否打开:
echo >/dev/tcp/example.com/80 && echo "端口80已打开" || echo "端口80已关闭"

image-20230813161248295

此命令通过尝试打开到远程主机example.com的连接来检查其端口80是否打开。如果连接成功,则显示消息“端口80已打开”。否则,它会显示消息“端口80已关闭”。

  1. 给HTTP服务器发送请求并获得响应:
exec 3<>/dev/tcp/example.com/80
echo -e "GET / HTTP/1.1\r\nConnection: close\r\nHost: example.com\r\n\r\n" >&3
cat <&3 

image-20230813161316807

以下是命令的每一行的作用:

  1. exec 3<>/dev/tcp/example.com/80:这将在端口80上打开到"example.com"的网络连接,并将其与文件描述符3关联。使用exec命令为shell脚本的其余部分设置文件描述符重定向。

  2. echo -e "GET / HTTP/1.1\r\nConnection: close\r\nHost: example.com\r\n\r\n" >&3:这将使用文件描述符3向端口80上的Web服务器发送HTTP GET请求。>&3将echo命令的输出重定向到文件描述符3,该文件描述符将数据发送到网络连接。

  3. cat <&3:这将从文件描述符3读取Web服务器的响应。<&3将cat命令的输入从文件描述符3重定向,该文件描述符将读取响应数据。

  4. 设置端口转发隧道:

while true; do nc -l 1234 <&1 2>&1 | nc example.com 80 >&2 2>&1; done

image-20230813161343686

执行转发命令

image-20230813161407584

此命令在两个主机之间设置了一个端口转发隧道。它在端口1234上侦听传入连接,并将所有输入和输出重定向到与端口80上的example.com的连接。可以访问远程主机上运行的服务,就好像它们在本地运行一样。

注意,/dev/tcp不是POSIX标准的一部分,可能不适用于所有系统或Shell。此外,由于它可以用于基于网络的攻击,系统管理员可能会限制/dev/tcp的使用。

posted @ 2023-08-13 16:14  寻梦99  阅读(1372)  评论(0)    收藏  举报