2020未来网络SDN实验室纳新题

作业描述 详情
这个作业属于哪个课程 2020未来网络SDN实验室纳新营
这个作业要求在哪里 2020未来网络SDN实验室纳新题
这个作业的目标 1.注册博客园,并加入班级,可自行美化样式,学习 Markdown 排版;
2.学习 Git,并创建自己的 Github 账户;
3.安装配置 Ubuntu 虚拟机系统当作流量接收方;
4.tcpdump读取外来流量,处理格式;程序读取流量信息,并统计;
5.进一步从频率或者报文长度或其他特征找出前K大或者超过阈值T的可疑流量,K值和阈值T由用户设定,允许存在一定误差。
作业正文 2020未来网络SDN实验室纳新题题解
参考文献 VM虚拟机下载及安装教程
VMware虚拟机所有版本永久许可证激活密钥
Windows10下安装Ubuntu18.04LTS详细教程
Win10虚拟机VMware安装Ubuntu 18.04.4详细过程步骤
Tcpdump命令行网络抓包工具 介绍 LinuxCast IT播客
tcpdump抓包分析
tcpdump使用指南
五元组
TCP/IP网络模型
sketch简介
Netflow 链接

自我介绍

  • 姓名:罗佳昱
  • 学号:031903146
  • 班级:信息安全01班
  • 性格:
    • 跟熟人话贼多
    • 热衷于探索新事物
    • 如果一群人的目光聚集在自己身上,会浑身不适,比如上台演讲
    • 对于自己想做的事愿意付出自己全力
    • 给自己的定义是任务驱动型的人,不作为任务布置的事情如果期间有其他事情出现,经常会拖延到必须要做时才会去做
    • 自己觉得自己还是挺好相处的一个人,热衷于古风歌曲
  • 掌握的技术:目前已经学习过C语言和C++,正在学习算法与数据结构和自学Java。之前已经学习过Markdown语法和一些GitHub用法,并发布了博客,链接即为博客内容

作业链接

本次作业链接
本次作业Github仓库地址

虚拟机 + ubuntu 安装过程

虚拟机安装

一、前往VMware官网地址(https://www.vmware.com/cn.html)

二、虚拟机的安装

  • 打开下载好的exe文件,弹出安装界面。
  • 点击下一步直到下图位置,此时可以自行选择安装位置
    注意:安装路径要用英文
  • 接下来只要一直点下一步就可以了



三、获取许可证秘钥

Ubuntu安装

一、下载Ubuntu 18.04.5的镜像文件

清华大学开源软件镜像站

  • 点击下载ubuntu-18.04.5-destop-amd64.iso版本

二、打开虚拟机VMware,选择“创建新虚拟机”

  • 一直点击下一步


  • 这里可以设置安装位置
  • 这里设置处理器和内核个数

    设置处理器和内核个数可以去任务管理器->性能看一下自己的机子情况(看内核和逻辑处理器)作出选择
  • 一直点击下一步

    ![](https://img2020.cnblogs.com/blog/1925116/202010/1925116-20201024001523827-28820617.png)


  • 下一步,选择“将虚拟磁盘存储位单个文件”
  • 下一步
  • 下一步
  • 下一步去自定义硬件里面,选择“新CD/DVD(SATA)”点击“使用ISO映像文件”加入之前下载的Ubuntu镜像文件后确认

三、打开已经创建的虚拟机安装Ubuntu

  • 出现以下页面,选择自己喜欢的语言后点击安装,然后接下来都是点继续





  • 设置用户和密码,写自己记得住的就行,写了”您的姓名”之后,“您的计算机名”和“选择一个用户名”会自动填好,不用改,然后可以选择“自动登录”,方便
  • 开始安装(这个会等的久一点,但也不会很久,大概二十分钟左右)
  • 点击立即重启

    至此Ubuntu安装完成,不过会不会觉得屏幕太小了?再安装个VMware Tools吧

VMware Tools安装

  • 如图点击安装,然后就可以看到图里的桌面上的VMware Tools的光盘,点击进入其中

  • 进入后会看到一个压缩文件 VMwareTools-10.3.22-15902021.tar.gz(中间的数字不同的虚拟机版本可能会不一样),然后我们复制这个文件粘贴到我的主目录下面(即home->个人用户名的目录下面)

  • 解压缩这个文件,按【Ctrl+Alt+T】调出终端命令界面,输入命令【tar -zxvf VMwareTools-10.3.22-15902021.tar.gz】然后回车执行,解压这个压缩文件(可以在输入【tar -zxvf VM】后按【Tab】键自动补全整个文件的名字)

  • 解压完成后,在原来的主目录下会多出一个 vmware-tools-distrib 的文件夹;

  • 接着输入命令【cd vmware-tools-distrib】后回车进入这个文件夹(可以在输入【cd vm】后按【Tab】键自动补全整个文件夹的名字),然后输入命令【sudo ./vmware-install.pl】回车后输入用户密码,然后看到选择Yes/No的全部写yes,其余全部按回车,就可以安装完成了

  • 出现下图结果即为安装成功

  • 以下为屏幕变大效果

    看着爽多了呢()

tcpdump目前学习情况汇报

tcpdump 抓包过程和数据清洗过程

  • 初始加了-n
  • 加上-q -t

tcpdump的一些基本指令(更多详见tcpdump使用指南


Ctrl+c//停止抓包
- c//指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
- i interface//指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
- n//对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
- nn//除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
- N//不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
- P//指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
- s len//设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      //输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,
      //从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。
- w t.txt//将抓到的包的内容写到t.txt文件夹内,此时看不见
- r t.txt//读取存到t.txt的内容,只能用-r来读取,直接打开是乱码
- D//列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
- F//从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
- e//输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
- q//快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
- X//输出包的头部数据,会以16进制和ASCII两种方式同时输出。
- XX//输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
- v//当分析和打印的时候,产生详细的输出。
- vv//产生比-v更详细的输出。
- vvv//产生比-vv更详细的输出。

tcpdump输出内容分析

23:09:50.567344 IP 13.225.143.111.443 > 192.168.243.128.58042: Flags [P.], seq 1441:2881, ack 518, win 64240, length 1440

1.第一列:时分秒毫秒 23:09:50.567344
2.第二列:网络协议 IP
3.第三列:发送方的IP地址+端口号,其中13.225.143.111是 IP,而443 是端口号
4.第四列:箭头 >, 表示数据流向
5.第五列:接收方的IP地址+端口号,其中192.168.243.128是IP,而58042是端口号
6.第六列:冒号
7.第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面

Flags 标识符

使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)

学习到的一些概念

  • 五元组
    五元组是通信术语。通常是指源IP地址,源端口,目的IP地址,目的端口和传输层协议
  • TCP/IP网络模型
    TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。
  • 链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
  • 网络层:负责路由以及把分组报文发送给目标网络或主机。
  • 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。
  • 应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。

TCP/IP 中有两个具有代表性的传输层协议----TCP 和 UDP。

  • TCP
    TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。
  • UDP
    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
    还有一些忘记及时存了,暂时先这些

寻找TOP-K

  • 如果只用tcpdump -i ens33 -t -q -n会发现有很多长度是0的包,而且好像都是用TCP协议的(还没查为什么),如下图
  • 综上我选择处理长度大于0的且为UDP协议的包,于是用tcpdump -i ens33 -n -t -q 'ip[2:2] > 0' and udp

代码实现

本来想用哈希排序,搞了好几天,无奈指针还是用的有点不清楚,报错一直消不掉,只能先用计数排序做

代码如下:

#include<iostream>
#include<stdlib.h>
#include<string>
#include<string.h> 
using namespace std;
int main()
{
	string str;
	string s[1000][1000];//设置了s最多处理包长为1000,每种包长能存的包顶多1000个
	int max=0;//记录最大值,作为后面寻找前几名的开始
	int a[1000] = { 0 };
	while (1)
	{
		char str1[100];
		getline(cin, str);
		if (str == "0")
			break;
		int k = 0,length=str.length();
		for (int i = 0;; i++)
		{
			if (!(str[length - i-1] < 58 && str[length - i-1]>48))//从后往前找到第一个不是数字的字符后进入下面的循环
			{
				for (int j =length - i ; j < length; j++)//将数字字符存入新字符数组
				{
					str1[k] = str[j];
					k++;
				}
				str1[k] = '';
				break;
			}
		}
		int c = atof(str1);//数字字符数组转换为数字函数,返回值是double,我把它强制变成int
		if (c > max)//最大值更新
			max =c;
		s[c][a[c]] = str;//存到对应的桶
		a[c]++;//桶内元素个数更新
		memset(str1, '0', sizeof(str1));//清空字符数组
		str.clear();
	}
	int count = 0;//记录已经找了前多少个元素
	for (int i = 0;count<=10;i++ )
	{
		if (max - i > 0)
		{
			if (a[max - i] != 0)//不为零的才是有存元素的
			{
				for (int k = 0; k < a[max - i]; k++)
				{
					cout << s[max - i][k] << endl;
					count++;
				}
					
			}
		}
	}
	return 0;
}

寻找前十名结果(注:0之上为输入数据,之下为结果):

遇到的问题以及解决

1.安装VMware tools的时候,看的的那个教程Windows10下安装Ubuntu18.04LTS详细教程只讲了开头和结尾,再加上第一回装上虚拟机有点兴奋,在后面选择的时候全部按回车,导致安装失败。再重装VMware tools时提示有旧的安装,又找不到vmware-uninstall-tools.pl,用网络的教程不知道为什么失败了。
解决方法:被迫重装虚拟机再重装VMware tools,认真做选项从而完成安装
2.最初抓到的包都是下面这个样子的

着实让我很懵,这跟网络上查的样子完全不一样,尝试重装虚拟机,重装了两次也没有用
解决方法:解决的也挺突然,在一个个尝试tcpdump的指令时,发现了

- n//对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
- nn//除了-n的作用外,还把端口显示为数值,否则显示端口服务名。

结果如下(这里还加了-q不显示后面那一堆乱七八糟的东西)

3.一开始想着找top-k挺容易的,直接冒泡排序啥的就出来了,在知道要处理以万为单位的包时,人就傻了
解决方法:本想用哈希排序,无奈被指针搞吐了,报错消了好几天还没弄好,只能用计数排序先做,也导致能够处理的包的数量大大受限,暂时这样,如果哈希的代码改出来了再补上

总结

虽然信安课业比较繁重,但是还是挤出了时间尽可能完成了作业,提前交作业的原因是接下来几天要赶几个ddl,担心在忙乱中忘记交作业o(╥﹏╥)o。很快乐学习到了很多新概念,终于装上了心心念念的虚拟机,很早就想装不过老是拖延(任务驱动型实锤),比较遗憾没能实现处理百万数据的top-k的寻找。
觉得翻页太麻烦可以直接点击右边的小飞机飞回顶部

原文地址:https://www.cnblogs.com/2002ljy/p/13861801.html