• 在linux中使用tcpdump抓包的方法:


    在linux中使用tcpdump抓包的方法:

    1,运行下面命令来从所有网卡中捕获数据包:

    tcpdump -i any

    2,从指定网卡中捕获数据包

    tcpdump -i eth0

    3,指定网卡,IP地址,写入文件

    tcpdump -i eth0 host 10.19.150.242 -w ./datdump.cap

    4,指定网卡,源ip 且 目的ip,写入文件

    tcpdump -i eth0 src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump1.cap

    5,指定网卡,源ip 或 目的ip,写入文件

    tcpdump -i eth0 src host 10.10.100.19 or dst host 10.10.100.153 -w ./datdump1.cap

    6,指定网卡,tcp端口 且 源ip 且 目的ip,写入文件

    tcpdump -i eth0 tcp port 52312 and src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump3.cap

    7,指定网卡,tcp端口 且 源ip 且 目的ip,写入文件

    tcpdump -i eth0 host ! 10.10.100.19 and ! 10.10.100.153 -w ./datdump4.cap

    8,只抓取sync的数据包 具体什么意思,详见

    tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

    9,只抓取HTTP包

    tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x48545450' -w ./datdump5.cap

    10,只抓取ip数据帧中没有数据的包,详见

    tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0' -w ./datdump6.cap

    tcpdump [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ]

    man tcpdump
    
    
    tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
    
    ​    [ -c count ]
    
    ​    [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
    
    ​    [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
    
    ​    [ --number ] [ -Q in|out|inout ]
    
    ​    [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
    
    ​    [ -W filecount ]
    
    ​    [ -E spi@ipaddr algo:secret,... ]
    
    ​    [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
    
    ​    [ --time-stamp-precision=tstamp_precision ]
    
    ​    [ --immediate-mode ] [ --version ]
    
    ​    [ expression ]
    
    
    
    选项翻译如下: 
    
    -l:使标准输出变为缓冲行形式;
    
    -c:抓包次数;
    
    -nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;
    
    -s :<数据包大小> 设置每个数据包的大小;
    
    -i:指定监听的网络接口;
    
    -r:从指定的文件中读取包;
    
    -w:输出信息保存到指定文件;
    
    -a:将网络地址和广播地址转变成名字;
    
    -d:将匹配信息包的代码以人们能够理解的汇编格式给出;
    
    -e:在输出行打印出数据链路层的头部信息;
    
    -f:将外部的Internet地址以数字的形式打印出来;
    
    -t:在输出的每一行不打印时间戳;
    
    -v :输出稍微详细的报文信息;--vv则输出更详细信息。
    

    抓取带有特殊标记的数据包

    https://www.jb51.net/LINUXjishu/118388.html?pc

    示例:抓取只包含SYN位的数据包

    1.客户端发送SYN

    2.服务端回应SYN和ACK

    3.客户端发送ACK

    现在我们仅捕获包含SYN位的数据包。 注意,不希望步骤2(SYN-ACK)的数据包,只是一个普通的初始SYN。

    tcp头的结构

    TCP头包含20个字节固定长度的数据(上图中的前4行),而控制位位于第13个字节(字节计算从0开始)

    只看我们感兴趣的控制位:

    这些是我们感兴趣的TCP控制位。我们对这个八位组中的位进行了编号,从0到7,从右到左,所以PSH位是位编号3,而URG位是编号5,SYN位是2。

    如果只包含 SYN 位,那就是 tcp头的第13个字节(0开始)的值为2,即tcp[13] == 2。

    tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

    如果抓取包含SYN位的数据包

    tcpdump -i eth0 'tcp[13] & 2 == 2' -w ./datdump5.cap

    示例:只抓取ip数据包没有数据的包

    tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) == 0' -w ./datdump6.cap

    ip[2:2]

    表示整个ip数据包总长度,即ip头的第2个字节(0开始)开始的两个字节(2,3)的值。

    (ip[0]&0xf)<<2

    ip头的第0个字节取低4位,然后左移两位(乘4),即ip头的长度。乘4的原因是首部长度表示有多少个32位的数据。

    (tcp[12]&0xf0)>>2)

    表示tcp头的长度。

    示例:只抓取http数据包

    tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x47455420' -w ./datdump5.cap

    tcp[(tcp[12]>>2):4] 表示tcp头部之后的4个字节的值,0x47455420 就是HTTP的16进制。

  • 相关阅读:
    Windows服务在Win7中不能安装的解决方法
    SharePoint2007安装图文详解二:安装AD(活动目录)及DNS
    在SqlServer 2008中将数据导成脚本
    Asp.Net站点整合Discuz论坛实现同步注册和单点登录
    SharePoint2007安装图文详解三:安装SqlServer2005
    给Javascript代码“预留退路”
    微软最新的 Web 开发工具WebMatrix的简单介绍及安装
    未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序 错误解决
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)多条件模糊查询和回收站还原的实现
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)用户信息的修改和浏览
  • 原文地址:https://www.cnblogs.com/xutopia/p/15738423.html
Copyright © 2020-2023  润新知