Linux系统应用与设置(4):Linux抓包工具tcpdump

1. 简述

        tcpdump 是一款广泛使用的命令行网络分析工具,它能够捕获和分析网络上的数据包。这个强大的工具对于网络故障排查、安全监控和网络流量分析非常有用。

        值得注意的是,通过tcpdump抓取的数据还可以通过保存为*.pcap文件,然后使用wireshark进行更深层次的可视化分析。

2. 基本语法

tcpdump 的基本语法如下:

tcpdump [options] ... [expression]

其中,

options:用于指定如何捕获和显示数据包的各种参数。

expression:用于过滤捕获的数据包。

3. 常用选项

        -i <interface>:指定网络接口,如 eth0。

        -nn:不要解析网络名称(例如,不要将IP地址转换为主机名)。

        -X 或 -XX:显示十六进制和 ASCII 编码的数据。如下所示,除第一行以外,数据域用HEX形式进行打印输出,同时也伴有ASCII输出。

        -A:将接收到的数据以ASCII码的形式打印出来,如下所示,除第一行外,数据域都是ASCII码。

        -w <file>:将捕获的数据包写入文件,用于后续分析。

        -r <file>:从文件中读取数据包。

        -c <count>:捕获指定数量的数据包后停止。

        除以上常用的选项以外,还有如下,可灵活使用。

        -C:在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

        -d:将匹配信息包的代码以人们能够理解的汇编格式给出。

        -dd:将匹配信息包的代码以c语言程序段的格式给出。

        -ddd:将匹配信息包的代码以十进制的形式给出。

        -D:打印出系统中所有可以用tcpdump截包的网络接口。

        -e:在输出行打印出数据链路层的头部信息。

        -E:用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。

        -f:将外部的Internet地址以数字的形式打印出来。

        -F:从指定的文件中读取表达式,忽略命令行中给出的表达式。

        -l:使标准输出变为缓冲行形式,可以把数据导出到文件。

        -L:列出网络接口的已知数据链路。

        -m:从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。

        -M:如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。

        -b:在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。

        -n:不把网络地址转换成名字。

        -N:不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。

        -t:在输出的每一行不打印时间戳。

        -O:不运行分组分组匹配(packet-matching)代码优化程序。

        -P:不将网络接口设置成混杂模式。

        -q:快速输出。只输出较少的协议信息。

        -S:将tcp的序列号以绝对值形式输出,而不是相对值。

        -s:从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。

        -T:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。

        -t:不在每一行中输出时间戳。

        -tt:在每一行中输出非格式化的时间戳。

        -ttt:输出本行和前面一行之间的时间差。

        -tttt:在每一行中输出由date处理的默认格式的时间戳。

        -u:输出未解码的NFS句柄。

        -v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。

        -vv:输出详细的报文信息。

4. 过滤表达式

        host <hostname>:只捕获与指定主机名或IP地址相关的数据包。

        port <port>:只捕获特定端口的数据包。

        src <address>:只捕获源地址为指定地址的数据包。

        dst <address>:只捕获目的地址为指定地址的数据包。

        and、or、not:逻辑运算符,用于组合多个过滤条件。

5. 示例

(1)捕获所有经过eth0接口的TCP数据包:

        tcpdump -i eth0 tcp

(2)捕获指定接口的所有数据包,并写入文件:

        tcpdump -i eth0 -w capture.pcap

(3)从文件中读取数据包:

        tcpdump -r capture.pcap

(4)只捕获源地址为192.168.1.100的数据包:

        tcpdump src 192.168.1.100

(5)只捕获目的端口为80的数据包:

        tcpdump 'dst port 80'

(6)同时根据源地址和目的端口过滤数据包:

        tcpdump 'src 192.168.1.100 and dst port 80'

(7)实时显示数据包的十六进制和ASCII编码:

        tcpdump -X -nn -i eth0

(8)捕获特定数量的数据包:

        tcpdump -c 100 -i eth0

(9)使用复杂过滤表达式:

        tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst 192.168.1.0/24'

6. 高级用法

        使用 tcpdump 进行实时监控:

tcpdump -i any 'tcp port 22' -l -n -vvv -s 0 -w ssh_traffic.pcap

        这个命令实时捕获所有进入22端口的TCP数据包,不解析主机名,不限制源和目的端口,不使用任何捕获长度限制,并将结果写入 ssh_traffic.pcap 文件。

        分析 tcpdump 捕获的数据包: 使用 -nnX 选项可以显示更详细的信息,包括每个数据包的十六进制和ASCII编码,这对于深入分析数据包内容非常有用。

7. 使用wireshark分析

(1)写入本地

        使用tcpdump进行抓包时,通过“-w”选项,将抓到的数据包写入本地,参考如下。

tcpdump -i eth0 -w capture.pcap

(2)wireshark导入

        在 Wireshark 中,选择 "File"(文件)> "Open"(打开),然后浏览到你保存 tcpdump 捕获数据的 .pcap 文件。选择文件并点击 "Open"(打开)。

(3)过滤分析

        通过wireshark的过滤功能,协议分析功能以及图像化显示功能,分析当前数据包,并可将分析结果写入本地。

8. 注意事项

(1)使用 tcpdump 可能需要管理员权限,尤其是在捕获经过网络接口的数据包时。

(2)过滤表达式需要仔细设计,以确保只捕获所需的数据包。

(3)分析 tcpdump 的输出需要一定的网络协议知识。

(4)tcpdump 是网络管理员和安全专家的重要工具,通过掌握其使用,可以更有效地监控和分析网络流

相关推荐

  1. linuxtcpdump命令

    2024-07-11 00:52:01       28 阅读
  2. 网络工具tcpdump的使用

    2024-07-11 00:52:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 00:52:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 00:52:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 00:52:01       57 阅读
  4. Python语言-面向对象

    2024-07-11 00:52:01       68 阅读

热门阅读

  1. 【力扣C语言】每日一题—第69题,X的平方根

    2024-07-11 00:52:01       20 阅读
  2. 【Git】本地版本控制

    2024-07-11 00:52:01       23 阅读
  3. 【Cookie 在 Spring Boot 中的实现】

    2024-07-11 00:52:01       21 阅读
  4. SQL的时间格式和文本灵活转换

    2024-07-11 00:52:01       27 阅读
  5. ubuntu22 设置开机直接登录桌面

    2024-07-11 00:52:01       22 阅读
  6. Sqlmap中文使用手册 - Options模块参数使用

    2024-07-11 00:52:01       17 阅读
  7. GIT基本概念以及简单使用方法

    2024-07-11 00:52:01       22 阅读
  8. SQL注入如何判断数据库类型

    2024-07-11 00:52:01       25 阅读
  9. 什么是引用

    2024-07-11 00:52:01       23 阅读
  10. 如何从Git仓库中删除大文件并解决推送错误方案

    2024-07-11 00:52:01       23 阅读
  11. Git删除了文件拉取时失败

    2024-07-11 00:52:01       22 阅读