Linux 下端口占用的模拟: nc/socat
前言
今天需要测一个在写的网络辅助工具, 测试时需要预提供一些端口占用, 写了个nc脚本来实现, 这里简单技术普及下.
基础
Linux中使用nc和socat模拟端口占用的方法:
使用nc(netcat)模拟端口占用:
nc -l 8080- 监听8080端口nc -l -p 8080- 在某些系统中需要-p参数nc -k -l 8080- 持续监听,接受多个连接nc -l 0.0.0.0 8080- 监听所有网卡接口
使用socat模拟端口占用:
socat TCP-LISTEN:8080,fork /dev/null- 监听TCP端口socat UDP-LISTEN:8080,fork /dev/null- 监听UDP端口socat TCP-LISTEN:8080,reuseaddr,fork EXEC:/bin/cat- 可重用地址
其他工具:
用Python起HTTP服务或者脚本实现应该也是可以的, 大家可以头脑风暴.
实际使用
✅示例: 使用nc批量占用端口
#!/bin/bash
# 批量占用端口范围
start_port=8080
end_port=8090echo "开始占用端口 $start_port 到 $end_port"
for port in $(seq $start_port $end_port); donc -l $port &pid=$!echo "端口 $port 已占用,PID: $pid"
doneecho "按Enter键查看占用情况..."
read
ss -tulpn | grep -E ":($(seq -s'|' $start_port $end_port))"echo "按Enter键清理所有监听进程..."
read
jobs -p | xargs kill 2>/dev/null
echo "清理完成"
示例: 使用socat批量占用
#!/bin/bash
# socat批量占用指定端口列表
ports=(8080 8081 8082 9000 9001)echo "使用socat占用端口: ${ports[*]}"
for port in "${ports[@]}"; dosocat TCP-LISTEN:$port,reuseaddr,fork /dev/null &echo "端口 $port 已被socat占用,PID: $!"
done# 显示占用情况
echo -e "\n当前端口占用情况:"
ss -tulpn | grep -E ":($(IFS='|'; echo "${ports[*]}"))"echo -e "\n按Enter键清理所有socat进程..."
read
pkill -f "TCP-LISTEN"
echo "清理完成"
💡 注意点 & 总结
- 权限注意:占用1024以下端口需要root权限
- 工具选择:
nc:轻量级,适合简单测试socat:功能强大,适合复杂场景Python:跨平台,适合脚本化测试
