tcpdump 数据内容,tcpdump ip

  tcpdump 数据内容,tcpdump ip

  基于ip统计流量的Tcpdump用例——-Wang VSA-博客公园

  Tcpdump使用实例——统计基于ip的流量?Tcpdump-dump网络流量问题:基于ip的流量计数。

  硬件:学校集群

  困难:

  1.使用高速网卡(千兆或IB)且网卡满载时的丢包率是多少?

  2.程序的cpu利用率是多少?

  3.日志文件太大

  方案和分析:

  1.抓包的方式有很多种,比如使用libpcap库,采用零拷贝方式,使用PF_RING接口,直接使用系统函数。

  我看了一些文章,测试了netsniff-ng程序(基于零拷贝)。我觉得零拷贝的方式效率最高,丢包率最低。但是我.

  测试tcpdump的时候发现它的效率也很高(测试的时候网卡几乎是满的),几乎没有丢包。因为使用方便等。

  选择Tcpdump作为最终因素。

  2.tcpdump捕捉数据包时cpu利用率约为4%。

  3.tcpdump记录每个包,虽然我们可以限制每个包记录的字节数(-s选项),但是由于网卡已满,

  所以包的数量特别多。如下所示,在60秒内捕获了748,168个数据包,导致pcap文件非常大。

  ?数据包数量:748168文件大小:58394582字节数据大小:3900660165字节捕获持续时间:59.963470秒。所以我用-G选项每分钟记录一个pcap文件,然后自己删除数据,最后删除pcap文件。也就是每一分钟。

  按如下方式生成文件(时间间隔可以根据需要更改)

  ?12345678910111213141516171819202122232425文件名:/public/home/Wang VSA/software/TCP-audit/2012-07-16,12:54:54 . PCA文件封装:Ethernet数据包数量:748168文件大小:58394582字节数据大小:3900660165字节捕获10.10.61: 9090 10.10.10.49: 27884 tcp 17930。0.0.0:68 255 . 255 . 255 . 255:67 UDP 53110.10.49: - 10.10.10.62: - ICMP 23410。10.10.49: 22 10.10.10.61: 47051 tcp 11712410。10.10.48: 38906 10.10.10.49: 16797 t cp 4428897410。10.10.48: 64468 10.10.10.49: 45094 tcp 17110。10.10.61: 47051 10.10.10.49: 22 tcp 540610。10.10.49: 27884 10.10.10.61:90 9 TCP 211210 . 10 . 10 . 49:45094 10 . 10 . 48:64468 TCP 10810 . 10 . 10 . 62:-10 . 10 . 10 . 49:-icmp 23410 . 10 . 49

  1.为pcap文件写一个统计脚本(如果需要高效率,可以写成C语言程序)。有两个文件tcp-audit.sh和

  tcp-reduce.sh .Tcp-reduce.sh是在tcp-audit.sh中调用的,不要自己直接调用。

  先看tcp-audit.sh。这个文件从ready.txt中读取内容,每一行都是要计数的pcap文件的文件名。后来,

  讨论如何获取ready.txt文件。

  1 #!/bin/bash

  2 # tcp-audit.sh

  3 #读取ready.txt文件,一次一行

  4 #将其内容作为参数传递给tcp-reduce.sh

  5 #执行后删除此行。

  7 DIR=/home/王晨/shell_ex/

  9读取行时

  10 do

  11 # tcp-reduce.sh处理

  12 $DIR/tcp-reduce.sh ${line}

  13 #删除pcap文件

  14 rm $DIR/${line}

  15 #删除此行。

  16 sed -i 1d $DIR/ready.txt

  7done $ dir/ready.txt然后看tcp-reduce.sh这个脚本完成所有的统计操作并输出到日志文件。该脚本中使用了grep和sed命令。

  传入pcap文件的输出方便了awk程序的后期使用。或者使用capinfos提供的一些分析数据。

  注意:tcpdump和capinfos版本不同,参数选项要修改。例如,在旧版本中,capinfos的-x与-i一起使用。

  1 #!/bin/bash

  2 # tcp-reduce.sh

  3 DIR=/home/王晨/shell_ex

  5 #根据pcap文件名构造日志文件名(以时间命名)。

  6 tmp1=$*

  7 tmp2=(${tmp1//。/})

  8 LOG_FILE_NAME=${tmp2[0]} 。“日志”

  10 #输出文件信息,即网卡信息

  11 capiinfos-a-c-d-E-E-E-s-u-x-y $ DIR/$ * $ DIR/$ LOG _ FILE _ NAME

  13 #将tcpdump文件生成为可读文本

  14 #被grep和sed过滤替换,然后交给awk。

  15 #用awk语言处理数据线,统计基于ip的流量信息。

  16 tcpdump -q -n -e -t -r $DIR/$* \

  17 grep IPv4 sed s/,//g;s///g;s/://g \

  18 awk

  20开始{

  21 printf(\n )

  24 # $5:数据包长度

  25 # $6:源ip.port

  26 # $7:目的ip.port

  27 # $8:原型

  29 # array_flow是一个记录每个方向流量的数组。

  30 #其下标是数据传输的方向(字符串)

  32计数

  33路=6美元。$7.$8

  34 for(arr _ total _ flow中的x)

  36 if(way==x)

  38 arr _ total _ flow[way]=5美元

  39下一个

  42 arr _ total _ flow[way]=5美元

  45结束{

  46 printf(\nIPv4总数据包:%d\n ,NR)

  47 printf(s%6s%6ss%6s\tproto\tflow\n,source ip ,端口,目录,目标IP ,端口)

  48 for(arr _ total _ flow中的x)

  50 #打印格式

  51 split(x,chunks,.)

  52 if(chunks[9]==ICMP )

  54 printf(%3s。%3s。%3s。%3s:%6s %3s。%3s。%3s。%3s:%6s\t%s\t%d\n ,

  5块[1],块[2],块[3],块[4],-,#源地址:端口

  5组块[5],组块[6],组块[7],组块[8],-,#目的地址:端口

  5Chunks [9],arr _ total _ flow [x]) #总协议流量

  59其他

  61 printf(%3s。%3s。%3s。%3s:%6s %3s。%3s。%3s。%3s:%6s\t%s\t%d\n ,

  6块[1],块[2],块[3],块[4],块[5],#源地址:端口

  6组块[6],组块[7],组块[8],组块[9],组块[10],#目的地址:端口

  6Chunks [11],arr _ total _ flow [x]) #总协议流量

  68 $DIR/$LOG_FILE_NAME2。接下来就是如何运营的问题了。首先,以root权限执行tcpdump程序。我使用的命令如下:

  sudo CP dump-i eth3-s 84-g 60-z ./TCP-add . sh-w % f,% t. PCAP参数分析:-I eth3在eth 3上捕捉数据包;-s 84每个包最多记录84个字节;-G 60每60秒打开一个文件记录;

  -z ./tcp-add.sh与-G一起使用,并在每次记录文件时执行。/tcp-add.sh脚本(稍后将描述该脚本)

  -w %F,%T.pcap输出,文件名包含时间成分。%F代表年、月、日,%T代表时、分、秒,如2012-07-16,12:54:54.pcap。

  看这个tcp-add.sh,这个脚本很简单。其实就是把刚刚记录的pcap文件名写入ready.txt文件。

  1 #!/bin/bash

  2 #用作tcpdump的-z参数

  3 #将保存的pcap文件名添加到ready.txt进行处理。

  Echo $ * ready.txt,以便每分钟生成一个pcap文件,并将其文件名写入ready.txt文件。

  3.接下来,cron将用于定期执行我们的统计任务。打开crond服务后,执行以下命令

  1 sudo crontab -e该命令打开一个文件,在最后一行添加以下内容,然后保存并退出。

  1 */2 * * * */home/王晨/shell _ ex/tcp-audit.sh本文的意思是tcp-audit.sh脚本每两分钟执行一次(任何时间)。

  到这个时候,这个功能基本实现了,在集群中测量是可行的。

  当然,以上方案只是我在实验室的一个练习,肯定有很多不足之处。希望高手给点意见。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: