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] = '\0';
				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的尋找。
覺得翻頁太麻煩可以直接點擊右邊的小飛機飛回頂部


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM