多用途 TCP/UDP 网络工具
Netcrab 是一个命令行网络工具,可以做很多事情。它是对 netcat 的致敬,并且可以做许多它能做的事情。简要概述它可以做的事情:
要完整使用,请运行netcrab --help
。
netcrab HOST:PORT
这将连接到指定的 TCP 服务器。现在您的标准输入将被发送到服务器,并且标准输出将被打印出来。
主机名的 IPv6 格式应使用方括号括起来,例如 localhost 为[::1]
。
netcrab -L ADDR:PORT
netcrab -l ADDR:PORT
您可以作为 TCP 服务器侦听一个或多个任意端口。使用-l
会在第一个传入连接断开后退出程序。使用-L
“更努力地监听”:断开连接后继续监听。
ADDR:PORT
语法支持一些特殊变体:
localhost:5000
:5000
*:5000
默认情况下,TCP 服务器仅允许每个侦听地址一次有一个传入连接处于活动状态,但-m max_inbound_clients
标志允许多个连接。
与客户端模式一样,stdin 被发送到所有连接的套接字,并且来自所有套接字的传入数据被发送到 stdout。这可以使用下面的输入和输出模式参数进行更改。
-z
参数导致套接字立即断开连接,不允许发送任何数据。仅用于测试连接性。
netcrab -u -L ADDR:PORT
netcrab -u HOST:PORT
UDP 很奇怪,因为你并没有真正与它“连接”。您绑定到本地端口,然后向远程对等点发送/接收数据报。 UDP 的监听模式和连接模式的工作原理完全相同,除了在连接模式下,第一个发送 stdin 的对等点在开始时就已知,而在监听模式下,stdin 流量不能发送到任何地方,直到监听器至少接收到来自对等点的一个数据报。
对于-L
这支持与上面的 TCP 相同的ADDR:PORT
语法。
数据报大小默认为 1 字节,但可以通过--ss
参数控制。
netcrab -L ADDR1:PORT1 -L ADDR2:PORT2
netcrab -u -L ADDR1:PORT1 -L ADDR2:PORT2
Netcrab支持同时监听多个本地地址和端口。它将接受到达其中任何一个的连接。这支持 TCP 和 UDP。
netcrab -u --mc HOST:PORT
Netcrab 通过添加--mc
参数支持将 UDP 套接字加入多播组。它还可以控制多播数据包的 TTL ( --ttl
) 以及是否接收自程序加入组以来循环返回的多播数据包 ( --mc_no_loop
)。
netcrab -u -b HOST:PORT
Netcrab支持发送UDP广播数据报。
netcrab -i MODE
可以控制输入模式。默认情况下,输入来自 stdin。它接受以下其他模式:
none
:无法输入。将处理的唯一流量将来自远程对等点。stdin-nochar
:与 stdin 工作方式相同,但不参与“字符模式”。这对于交互式用途来说效果更差。echo
:任何收到的流量都会回显给发送者。rand
:将生成随机数据。数据的随机大小可以通过--rsizemin
和--rsizemax
控制,数据的类型可以通过--rvals
控制。fixed
:仅对性能测试真正有用。具有固定数据的相同固定大小消息将被无限发送。您可以使用--ss
控制大小,并使用--rvals
控制其中随机数据的类型pfqoscli
:根据 PlayFab 服务质量信标测量延迟。pfqossrv
:充当 PlayFab 服务质量信标服务器,供客户端作为测量延迟的目标。当使用其中一种标准输入模式作为输入时,您可以指定--exit-after-input
在输入流到达文件末尾后退出程序。
netcrab -o MODE
默认情况下,输出转到 stdout,但将其更改为-o none
以跳过所有输出通常很有用。当传递大量流量时,这特别有用,因为它会减慢输出速度。
Netcrab 的默认模式是使用 stdin 和 stdout,因此您可以重定向文件中的输入并将输出发送到文件(或在程序之间通过管道传输)。
netcrab HOST:PORT < file
echo message | netcrab HOST:PORT
netcrab -6
netcrab -4
您可以限制仅使用 IPv6 或 IPv4 地址系列。当连接到通过 DNS 解析的主机名或在未指定显式源地址的情况下进行侦听时,这会产生更大的差异。
netcrab -s ADDR:PORT
当建立出站 TCP 连接或发送 UDP 数据报时,默认情况下 Netcrab 绑定到通配符 IPv4 和 IPv6 地址(0.0.0.0:0 和 [::]:0)。您可以传递-s
来显式绑定到地址。这支持“TCP 服务器”部分中描述的所有ADDR:PORT
变体。
netcrab HOST1:PORT1 HOST2:PORT2
Netcrab 允许同时连接到多个远程对等点。与侦听多个并发连接类似,来自本地计算机的流量将发送到所有连接的对等点(入站或出站)。
netcrab -L ADDR:PORT HOST:PORT
Netcrab 支持同时侦听入站连接和建立出站连接。这对于将流量从一个本地地址代理到另一个本地地址可能很有用,因为您可以独立指定要侦听的地址和用于出站连接的源地址。
netcrab HOST:PORTxNUM
有时,能够多次连接到同一端点非常有用,特别是对于通道场景。例如,要连接到主机名 12 次,您可以执行netcrab localhost:5000x12
。它将尝试对同一主机名和端口进行 12 个并发出站连接。
这也可以与多个目标相结合。在这里,我们在 IPv4 上连接到本地主机五次,在 IPv6 上连接到本地主机十三次。 netcrab 127.0.0.1:5000x5 [::1]:5000x13
。
netcrab -r
netcrab -R
在出站连接模式下,您可以要求 Netcrab 重新建立断开的连接。 -r
在正常连接关闭时重新建立。 -R
在不正常的错误上重新建立。两者可以同时指定-r -R
或-rR
。
netcrab --fm channels
netcrab --fm linger-channels
现在我们来看看真正有用的部分。 Netcrab 可以变成路由器,在多个端点之间转发流量。 “通道”模式将端点配对并将流量从一个端点双向转发到另一个端点,就像透明代理一样。流量不在通道之间转发。想象一下下面的图表:
+-------------+ +-----------------------------+ +-------------+
| | | netcrab | | |
| HOST1:PORT1 <----> HOST2:PORT1 <-> HOST2:PORT2 <----> HOST3:PORT1 |
| HOST1:PORT2 <----> HOST2:PORT3 <-> HOST2:PORT4 <----> HOST3:PORT2 |
| | | | | |
+-------------+ +-----------------------------+ +-------------+
第一和第二通道一路穿过,但不交叉溪流。如果主机 1 或主机 3 断开端点的连接,则该断开也会“转发”到通道的另一端。如果该行为不适合您,您可以切换到延迟通道模式。
在通道模式下,假设用户可能一次需要多个连接才能实际使用通道,则每个侦听地址的最大客户端数会自动增加到 10 个。这可以用-m
覆盖。
netcrab --fm hub
集线器模式与通道模式类似,但更简单:来自所有网络源的所有流量都转发回所有其他套接字。您可以用它来设置聊天室或其他东西。
与通道模式一样,在集线器模式下,最大客户端数会自动增加到每个侦听地址 10 个,但可以使用-m
覆盖。
netcrab -e COMMAND
Netcrab 可以执行另一个程序并将其标准输入和标准输出连接到网络。可以轻松地使用它来公开远程 shell 或其他东西,尽管您当然要小心这一点。在此模式下,常规输入和输出将被禁用。
命令字符串通过当前 shell 运行。
几乎所有上述功能都可以同时组合和使用。例如,您可以侦听多个地址并在同一会话中连接到多个目标,同时使用集线器在所有连接之间转发。