tcpdump抓包结合wireshark进行分析

一、简介

如果是在windows环境,可以使用wireshark直接抓包,如果是在linux环境下,可以使用tcpdump命令进行抓包。
tcpdump是Linux系统下的一款抓包命令集,工作原理是基于网卡抓取流动在网卡上的数据包。在Linux系统中由于tcpdump命令的简单和强大,我们一般直接使用tcpdump命令来抓取数据包。保存为.pcap文件后,拖下来在wireshark中分析。

二、主要内容

1、Linux虚拟机及其作用:两个Linux虚拟机,一个用于抓包,一个用于对其进行攻击,从而产生异常流量。正常流量就是系统正常工作时网络中的流量,异常流量是通过网络攻击工具产生的。
2、抓包、分析:在Linux系统中,利用tcpdump进行抓包,抓取3000个正常样本和4种攻击的800个攻击样本,将数据包保存为.pcap文件,在windows系统上,利用wireshark进行分析。
注意:需要为tcpdump添加进程守护,使其一直在后台工作,最后将捕获的数据以文件的形式保存在Linux服务器上。
注意:新建虚拟机不应该使用同一个镜像文件,否则可能只有一台虚拟机可以工作,造成比如一个能上网,另一个上不了。磁盘占用过高可以:在Ubuntu 64 位.vmx文件中添加mainMem.useNamedFile = “FALSE”。多个虚拟机最好不要使用同一个系统镜像。使用SecureCRT连接虚拟机时,拒绝连接,可以sudo apt-get install openssh-server。
注意:LINUX虚拟机和windows主机共享文件,首先要安装VMwaretools,然后设置文件共享。
安装

三、tcpdump抓包和wireshark分析

1、准备工作

首先判断系统中是否有tcpdump,进入Linux终端,输入如下指令,tcpdump,libpcap的版本,以及tcpdump的使用说明。

baichuan@baichuan-virtual-machine:~$ tcpdump -h
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [ -C file_size ] [ -E algo:secret ] 
[ -F file ] [ -G seconds ] [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ] [ -Q in|out|inout ]  [ -r file ] 
[ -s snaplen ] [ --time-stamp-precision precision ] [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
 [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ]

常用的一些参数的解释
-i:指定tcpdump监听的网络接口
-s:指定要监听数据包的长度
-c:指定要监听的数据包数量,达到指定数量后自动停止抓包
-w:指定将监听到的数据包写入文件中保存
-A:指定将每个监听到的数据包以ACSII可见字符打印
-n:指定将每个监听到数据包中的域名转换成IP地址后显示
-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议
-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用
-r:指定从某个文件中读取数据包
-S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-XX:输出数据包的头部数据。
-v :输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv :输出详细的报文信息;
-vvv:打印和分析的时候,产生非常详细的输出。
-a : 将网络地址和广播地址转变成名字;
-ddd :匹配信息包的代码以十进制的形式给出;
-t :在输出的每一行不打印时间戳;
-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用

查看网卡:得到tcpdump可抓取数据包的网卡列表,利用以下语句:

baichuan@baichuan-virtual-machine:~$ tcpdump -D
1.ens33 [Up, Running] #这是个虚拟网卡,是该服务器的第一块网卡,一般我们tcpdump抓包都使用这块网卡来抓取
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth0 (Bluetooth adapter number 0)
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)
8.usbmon2 (USB bus number 2)

查看该系统有哪些网卡:ifconfig ,我的系统有两块网卡,我们使用第一块。

baichuan@baichuan-virtual-machine:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.150.128  netmask 255.255.255.0  broadcast 192.168.150.255
        inet6 fe80::a866:5ef0:1ac9:286c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:72:8e  txqueuelen 1000  (以太网)
        RX packets 7200  bytes 5683226 (5.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4048  bytes 511334 (511.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 621  bytes 65926 (65.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 621  bytes 65926 (65.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、tcpdump抓包与wireshark分析

该部分使用tcpdump命令语句抓包,存储为.pcap文件,利用wireshark进行分析
下面是一个tcpdump数据采集命令:
tcpdump -s 84 -G 60 -z./add.sh -w/data/dump/%F.%T.pcap
解释:数据包截取长度为84字节,抓取数据包间隔为60秒,每60秒记录一个新文件,前一个文件被送出进行整理(分析和特征提取)。一分钟保证了数据从采集到整理再到异常检测的流程可以进行完毕;其次过长的时间间隔可能会造成异常流量已经产生危害,失去异常检测的意义。配合之前的G的时间间隔命令,每记录完一个文件,z执行add.sh脚本,把tcpdump命令产生的.pcap文件名写入ready.txt当中。w是将捕获的信息写入到data/dump/%F.%T.pcap文件中。脚本add.sh命令比较简单,为echo $*>>ready.txt(也就是将.pcap的文件名保存在ready.txt中)
守护进程脚本:为保证数据包抓取的长期执行需要,写一个守护进程脚本,将tcpdump写入脚本中。
(1)新建一个guard.sh文件:touch mkdir.sh
(2)编写文件:利用vim工具, vim gurad.sh
(3)编写守护进程脚本:

#! /bin/sh
#进程名字可修改
PRO_NAME=tcp_dump_data
CMD="tcpdump -i ens33 -s 84 -G 60 -w/mnt/hgfs/shares/dump/%F.%T.pcap"
while true ; do
#用ps获取$PRO_NAME进程数量
	NUM=`ps aux | grep -w ${PRO_NAME} | grep -v grep |wc -l`
#echo $NUM
#少于1,重启进程
	if [ "${NUM}" -lt "1" ];then
 		echo "${PRO_NAME} was killed"
		$CMD
#大于1,杀掉所有进程,重启
	elif [ "${NUM}" -gt "1" ];then
		echo "more than 1 ${PRO_NAME},killall ${PRO_NAME}"
		killall -9 $PRO_NAME
		$CMD
	fi
#kill僵尸进程
	NUM_STAT=`ps aux | grep -w ${PRO_NAME} | grep T | grep -v grep | wc -l`
	if [ "${NUM_STAT}" -gt "0" ];then
		killall -9 ${PRO_NAME}
		$CMD
	fi
	sleep 60s
done

设置脚本执行权限 chmod 777 guard.sh
控制台执行则:./guard.sh 这样就会保证始终存在一个xxxx程序的运行。
需要后台持续运行则:nohup ./guard.sh &
得到的.pcap文件如图所示
在这里插入图片描述
在wireshark中的显示
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值