zoukankan      html  css  js  c++  java
  • 举例讲解Linux中tcpdump工具的应用

    先来看一个比较基本的用法:


    tcpdump -i eth0

    其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦。

    tcpdump的具体参数及意义:

    -i:指定tcpdump监听的网络接口

    -s:指定要监听数据包的长度

    -c:指定要监听的数据包数量,达到指定数量后自动停止抓包

    -w:指定将监听到的数据包写入文件中保存

    -A:指定将每个监听到的数据包以ACSII可见字符打印

    -n:指定将每个监听到数据包中的域名转换成IP地址后显示

    -nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示

    -e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议

    -p:将网卡设置为非混杂模式,不能与host或broadcast一起使用

    -r:指定从某个文件中读取数据包

    -S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号

    tcpdump支持很多的关键字,下面先看几个例子:

    (例1)tcpdump -i eth0 host 192.168.0.250 ----- 在网口eth0上抓取主机地址为192.168.0.250的所有数据包 。

    (例2)tcpdump -i eth0 net 192.168.0.0/24 ------ 在网口eth0上抓取网络地址为192.168.0.0/24的所有数据包

    (例3)tcpdump -i eth0 port 80 ------ 在网口eth0上抓取端口为80的所有数据包(注意,这里不区分是源端口还是目的端口)

    当然,我们也可以指定源端口或目的端口

    (例4)tcpdump -i eth0 src port 80 and dst port 6100 --- 在网口eth0上抓取源端口为80且目的端口为6100的数据包,这里用到了and逻辑运算符 

    (例5)tcpdump -i eth0 icmp --- 在网口eth0上抓取所有icmp协议的数据包

    以上几个例子,可以大致体现出tcpdump的基本用法。

    实际上,tcpdump主要包括三种类型的关键字,第一种是关于类型的关键字,主要包括host,net,port,如上面的例(1)(2)(3),第二种

    是确定传输方向的关键字,主要包括src,dst,src or dst,src and dst,这些关键字指明了传输的方向,如上面的例(4)。第三种是协议关键字,包括fddi,ip,arp,

    rarp,tcp,udp,imcp等,如上面的例(5)。

    除了这三种类型的关键字外,还有其他重要的关键字,如:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是'not'、'!',与运算符是'and'、'&&'、

    或运算符是'or'、'||',这些关键字可以组合起来构成强大的组合条件来满足我们的需求。

    借助tcpdump统计http请求
    这里所说的统计http请求,是指统计QPS(每秒请求数),统计前十条被访问最多的url。一般做这样的统计时,我们经常会使用网站访问日志来统计。当我们来到一个陌生的服务器环境,需要立即统计当前前十条被访问最多的url,来初步确定是否存在攻击行为,使用tcpdump则简单得多,因为我们不需要关心网站日志在哪,不需要考虑网站日志有没有开启之类的问题,直接用tcpdump捕捉当前的http包,再进一步过滤,就会得出我们想要的统计。此功能已集成到EZHTTP,下面是效果图:
    20151028102323743.png (571×593)

    下面介绍其统计方法。
    1、捕捉10秒的数据包。


    tcpdump -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -w /tmp/tcp.cap -s 512 2>&1 &
    sleep 10
    kill `ps aux | grep tcpdump | grep -v grep | awk '{print $2}'`

    此命令表示监控网卡eth0,捕捉tcp,且21-22字节字符为GE或者PO,表示匹配GET或者POST请求的数据包,并写到/tmp/tcp.cap文件。
    2、这时候我们得到最新10秒的二进制数据包文件,我们下一步就是通过strings命令来找出GET/POST的url以及Host。


    strings /tmp/tcp.cap | grep -E "GET /|POST /|Host:" | grep --no-group-separator -B 1 "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /" | awk '{url=$2;getline;host=$2;printf ("%s ",host""url)}' > url.txt

    此命令是本文的关键,通过strings显示二进制文件tcp.cap所有可打印字符,然后通过grep和awk过滤出http请求,并把拼接得到的url(包括域名+uri)写进一个文件url.txt。
    3、这时我们拿到了近10秒钟所有的访问url,接下来的统计就容易得出,比如:
    统计QPS:


    (( qps=$(wc -l /tmp/url.txt | cut -d' ' -f 1) / 10 ))

    排除静态文件统计前10访问url:


    grep -v -i -E ".(gif|png|jpg|jpeg|ico|js|swf|css)" /tmp/url.txt | sort | uniq -c | sort -nr | head -n 10

  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/askDing/p/5111379.html
Copyright © 2011-2022 走看看