zoukankan      html  css  js  c++  java
  • 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的寻找。
    觉得翻页太麻烦可以直接点击右边的小飞机飞回顶部

  • 相关阅读:
    Jmeter之八大可执行元件及执行顺序
    Windows系统下查看某一进程下所有线程的dos命令
    (转)WebSocket的原理
    DVWA的安装
    BurpSuite+SQLmap的一种另类扫描
    (转)sqlmap用户手册
    HTTP缓存&代理
    使用python实现两个文件夹里文件的对比(包含内容的对比)
    mapreduce-实现多表关联
    mapreduce-实现单表关联
  • 原文地址:https://www.cnblogs.com/2002ljy/p/13861801.html
Copyright © 2011-2022 走看看