基于XTerm实现模拟发包
介绍
-
XTerm是一个X Window System上的终端模拟器,用来提供多个独立的SHELL输入输出。
-
XTerm
使用虚拟终端技术将远程主机的终端模拟出来,实现了远程终端控制。 -
Iperf 是一个网络性能测试工具,可以测试最大
TCP
和UDP
带宽性能,具有多种参数和UDP
特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。 -
iperf
常用参数表。
参数 | 说明 |
---|---|
-b | UDP 模式的带宽限制,单位bps |
-e | 显示更多信息 |
-f | 设置带宽单位bps 、Kbps 、Mbps 、Gbps 以及对应的Bps |
-i | 发包的间隔时间,单位s |
-l | 缓冲区大小,默认TCP 为128K |
-m | 输出TCP 的最大端长度(MSS =MTU -TCP/IP header ) |
-o | 将信息输出到文件file 中 |
-p | 指定端口号 |
-u | 选择UDP 模式,默认TCP |
-w | 设置套接字缓冲区大小 |
-B | 绑定到多个地址中的一个,UDP 时用于组播分组 |
-M | 设置TCP 的最大端长度 |
-s | 服务器模式 |
-t | 设置传输的总时间,单位s |
-c | 客户端模式 |
-n | 设置发包的大小,单位Byte |
-P | 设置线程数,默认1 线程,服务器端和客户端同时定义 |
-T | 设置TTL 值 |
目的
- 在
mininet
中使用XTerm
+iperf
实现TCP
和UDP
发包模拟。 - 对不同流量强度进行分析,模拟正常发包和攻击流量。
配置
apt install mininet
安装mininet
环境。apt install xterm
安装XTerm
。- 使用
mn
打开mininet
默认拓扑,输入xterm h1 h2
打开虚拟终端。
模拟
正常TCP
TCP
的模拟发包需要建立连接,这里使用h1
作为接收端(服务端),h2
作为发送端(客户端)。- 设置服务端接收端口为
5566
,时间间隔为1s
。
# iperf -s -p 5566 -i 1
-
此时使用
ifstat
查看网络流量,发现并无大量流量生成。 -
-
设置客户端使用服务端套接字连接,发送
10s
的数据包。
# iperf -c 10.0.0.1 -p 5566 -t 10
客户端启动到建立
TCP
连接后,服务端才能在该端口接收数据包。
- 经过
10s
的传输后,客户端停止发送,服务端产生如下输出。
------------------------------------------------------------
Server listening on TCP port 5566
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 14] local 10.0.0.1 port 5566 connected with 10.0.0.2 port 47854
[ ID] Interval Transfer Bandwidth
[ 14] 0.0- 1.0 sec 2.59 GBytes 22.3 Gbits/sec
[ 14] 1.0- 2.0 sec 2.62 GBytes 22.5 Gbits/sec
[ 14] 2.0- 3.0 sec 2.53 GBytes 21.7 Gbits/sec
[ 14] 3.0- 4.0 sec 2.57 GBytes 22.1 Gbits/sec
[ 14] 4.0- 5.0 sec 2.67 GBytes 22.9 Gbits/sec
[ 14] 5.0- 6.0 sec 2.71 GBytes 23.3 Gbits/sec
[ 14] 6.0- 7.0 sec 2.66 GBytes 22.8 Gbits/sec
[ 14] 7.0- 8.0 sec 2.69 GBytes 23.1 Gbits/sec
[ 14] 8.0- 9.0 sec 2.70 GBytes 23.2 Gbits/sec
[ 14] 9.0-10.0 sec 2.73 GBytes 23.4 Gbits/sec
[ 14] 0.0-10.0 sec 26.5 GBytes 22.7 Gbits/sec
- 正常
TCP
模拟发包成功。
正常UDP
- 相对于
TCP
的三次握手,UDP
则简单粗暴,直接根据给定套接字就可以进行发包。 - 仍然选择
h2
作为发送端,设置服务端套接字,选择UDP
模式。
# iperf -c 10.0.0.1 -p 5566 -i 1 -u
h1
作为服务端,如果不打开服务端口接收数据,通过ifstat
仍然可以看到有流量发送出。
与
TCP
模式不同,如果服务端未启动,客户端是无法发出数据包的。
- 设置服务端接收端口,再次查看效果。
- 发现服务端成功接收
UDP
数据包,正常UDP
发包模拟完成。
DoS攻击
- 这里使用
scapy
模拟DoS
攻击,scapy
是用python
编写的,所以使用pip install
安装即可。 - 具体实现脚本参考我的另一篇博客。
Ping-DoS
-
将每个攻击脚本进程设置为
20
,在XTerm
中直接使用python3
运行。 -
-
可以很明显的看到目标机的端口流量激增。
-
使用
htop
查看本地进程,看到几乎全是脚本进程。 -
-
Ping DoS
完成。
目标机带宽足够,
Ping DoS
无显著影响但我物理机跑得呼呼响。
SYN-Flood
-
操作类似
Ping DoS
,这里只给出实现效果。 -
-
由于只发送
SYN
,而不完全建立连接,故没有发送其他数据包,目标机端口流量不会有变化。
这里只用了
5
个进程,但是效果很强烈,物理机出现卡顿。