XTerm send package

介绍

  • XTerm是一个X Window System上的终端模拟器,用来提供多个独立的SHELL输入输出。
  • XTerm使用虚拟终端技术将远程主机的终端模拟出来,实现了远程终端控制。
  • Iperf 是一个网络性能测试工具,可以测试最大TCPUDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。

  • iperf常用参数表。

参数 说明
-b UDP模式的带宽限制,单位bps
-e 显示更多信息
-f 设置带宽单位bpsKbpsMbpsGbps以及对应的Bps
-i 发包的间隔时间,单位s
-l 缓冲区大小,默认TCP128K
-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实现TCPUDP发包模拟。
  • 对不同流量强度进行分析,模拟正常发包和攻击流量。

配置

  • apt install mininet安装mininet环境。
  • apt install xterm安装XTerm
  • 使用mn打开mininet默认拓扑,输入xterm h1 h2打开虚拟终端。

模拟

正常TCP

  • TCP的模拟发包需要建立连接,这里使用h1作为接收端(服务端),h2作为发送端(客户端)。
  • 设置服务端接收端口为5566,时间间隔为1s
1
# iperf -s -p 5566 -i 1
  • 此时使用ifstat查看网络流量,发现并无大量流量生成。
  • 设置客户端使用服务端套接字连接,发送10s的数据包。

1
# iperf -c 10.0.0.1 -p 5566 -t 10

客户端启动到建立TCP连接后,服务端才能在该端口接收数据包。

  • 经过10s的传输后,客户端停止发送,服务端产生如下输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
------------------------------------------------------------
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模式。
1
# 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个进程,但是效果很强烈,物理机出现卡顿。