本文详细介绍了基于Python和Scapy库的TCP连接中断工具,通过解析/proc/net/tcp获取连接信息,支持按PID或端口号定位连接,可发送RST包强制终止会话,并集成ipset进行防火墙规则管理。
TCP劫持概念验证
工具概述
该Python脚本是一个TCP连接中断工具,利用Scapy库操纵网络数据包。它定义了连接处理的自定义异常,并通过读取Linux系统的/proc/net/tcp
文件(列出当前TCP连接)提供基于进程ID(PID)或TCP端口检索端点的功能。
核心功能
- TCPBreaker类:核心功能类,可过滤和拦截与指定本地和远程TCP端口相关的数据包
- 序列号捕获:捕获TCP会话的序列号以发送重置(RST)数据包
- 连接终止:有效终止目标TCP连接
- ipset集成:支持添加/删除IP对来管理防火墙规则
使用方式
1
|
python tcp_breaker.py [OPTIONS] [ipset_name]
|
选项参数
ipset_name
:(可选)要临时插入本地IP的ipset名称
--pid
:(可选)要终止连接的进程ID
--port
:(可选)要关闭的连接的本地TCP端口
-d, --remote-port
:(可选)将端口参数视为远程端口而非本地端口
-c, --capture
:(可选)指定捕获方法(“raw"或"nflog”)
--debug
:(可选)启用详细操作模式用于调试
示例命令
1
2
3
4
5
6
7
8
9
10
11
|
# 通过PID终止连接
python tcp_breaker.py --pid 1234 --port 8080
# 使用ipset终止连接
python tcp_breaker.py my_ipset --pid 1234
# 通过指定本地和远程端口终止连接
python tcp_breaker.py my_ipset --port 80 -d --remote-port
# 不使用ipset的原始捕获方法
python tcp_breaker.py --pid 5678 --port 443 --capture raw
|
技术实现
端点获取函数
1
2
3
4
5
6
7
8
9
10
11
|
def get_endpoints(pid=None, port_local=None, port_remote=None):
# 根据PID或端口获取连接端点信息
pass
def get_endpoints_by_port(port_local=None, port_remote=None):
# 通过端口号获取端点
pass
def get_endpoints_by_pid(pid):
# 通过进程ID获取端点
pass
|
ipset管理
1
2
3
|
def ipset_update(cmd, name, ip, port):
# 更新ipset规则
pass
|
TCPBreaker类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class TCPBreaker(Automaton):
def __init__(self, port_local, port_remote, timeout=False, **atmt_kwz):
# 初始化TCP连接中断器
pass
def pkt_filter(self, pkt):
# 数据包过滤逻辑
pass
@ATMT.state(initial=1)
def st_seek(self):
# 等待会话数据包状态
pass
@ATMT.state()
def st_rst_send(self):
# 发送RST包终止连接
pass
|
注意事项
- 需要足够的权限运行脚本,因为需要访问
/proc/net/tcp
- 可能需要提升权限来修改ipset规则或终止连接
- 支持原始套接字(raw)和nflog两种数据包捕获方式
作者信息
由ClumsyLulz(又名SleepTheGod Taylor Christian Newsome)开发
该工具为网络安全研究人员提供了程序化控制和管理TCP连接的能力,特别适用于网络调试和安全测试场景。