网络抓包工具 - tcpdump

简介: 【1月更文挑战第1天】

tcpdump 是一个网络抓包工具,用于捕获网络数据包并分析网络流量。它允许用户实时监视和分析经过系统网络接口的数据包,用于网络故障排除、协议分析和安全审计等场景。

tcpdump 依赖 libpcap 软件包。

与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。

注意:运行 tcpdump 命令,需要使用 sudo 来获取超级用户权限或直接使用 root 用户执行命令。

安装 Tcpdump

安装 Tcpdump

  1. 打开终端(命令行窗口)。
  2. 使用以下命令更新软件包列表:sudo apt update
  3. 安装 tcpdump: sudo apt install tcpdump
  4. 验证安装:tcpdump --version,如果有显示tcpdump的版本信息,证明它已经成功安装在你的系统上。

编译安装 Tcpdump

编译安装 tcpdump 可以在某些情况下提供更灵活的选项和更新的版本。以下是基本的步骤:

  1. 下载 tcpdump 源代码:

    wget https://www.tcpdump.org/release/tcpdump-<version>.tar.gz
    

    请用实际的版本号替换 <version>,你可以从 tcpdump 的官方网站 获取最新的版本号。

  1. 解压源代码:

    tar -zxvf tcpdump-<version>.tar.gz
    cd tcpdump-<version>
    
  1. 安装必要的构建工具:

    sudo apt-get install flex bison byacc libpcap-dev
    

    在其他发行版上使用适当的包管理器来安装这些工具。

  1. 配置并编译:

    ./configure
    make
    

    如果 configure 命令失败,可能需要安装一些缺失的依赖项。根据错误消息,使用包管理器安装缺少的库。

  1. 安装:

    sudo make install
    

    这会将编译好的二进制文件安装到系统中。

  1. 检查安装:

    tcpdump -v
    

    这应该显示 tcpdump 的版本信息,证明它已经成功安装。

请注意,编译安装软件可能会在系统上引入一些不同的依赖关系和配置。确保你的系统满足 tcpdump 的编译要求,并且在进行此操作之前备份系统或记录更改,以便在需要时进行还原。

常用选项

抓包选项:

-c <数据包数目> 指定要抓取的包数量
-i <网卡接口> 指定tcpdump需要监听的接口,默认会抓取第一个网络接口;
-n 对地址以数字方式显示,否则显示为主机名,也就是说-n选项不做主机名解析;
-nn除了-n的作用外,还把端口显示为数值,否则显示端口服务名;
-P指定要抓取的包是流入还是流出的包,可以给定的值为inoutinout,默认为inout
-s <数据包长度> 设置tcpdump的数据包抓取长度为len,如果不设置默认为65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断。

输出选项:

-e 输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q 快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X 输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX 输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v 当分析和打印的时候,产生详细的输出。
-vv 产生比-v更详细的输出。
-vvv 产生比-vv更详细的输出

其它功能选项:

-D 列出可用于抓包的接口,将会列出接口的数值编号和接口名,它们都可以用于-i后。
-F 从文件中读取抓包的表达式,若使用该选项,则命令行中给定的其它表达式都将失效。
-w 将抓包数据输出到文件中而不是标准输出,这里可以同时配合-G time选项使得输出文件每time秒就自动切换到另一个文件。可通过-r选项载入这些文件以进行分析和打印。
-r 从给定的数据包文件中读取数据。使用-表示从标准输入中读取。

过滤规则

IP地址过滤

tcpdump host 192.168.88.210 过滤IP地址

tcpdump src host 192.168.88.210 过滤源IP地址

tcpdump dst host 192.168.88.210 过滤目的IP地址

网段过滤

tcpdump net 192.168.88.0/24 根据网段进行过滤

tcpdump src net 192.168.88 根据源网段进行过滤

tcpdump dst net 192.168.88 根据目的网段进行过滤

端口过滤

tcpdump port 80 过滤特定端口

tcpdump src port 80 过滤源端口

tcpdump dst port 80 过滤目的端口

tcpdump portrange 8000-8080 过滤一个端口范围

协议过滤

tcpdump icmp 过滤icmp协议

tcpdump tcp 过滤tcp协议

tcpdump udp 过滤udp协议

tcpdump arp 过滤arp协议

tcpdump rarp 过滤rarp协议

tcpdump dns 过滤dns协议

tcpdump http 过滤http协议

tcpdump ether 过滤以太网协议

tcpdump wlan 过滤无线局域网协议

使用案例

以下是一些 tcpdump 的常见用法示例:

  1. 捕获所有网络流量:

    sudo tcpdump -i <interface>
    
    例:
    tcpdump -i eth0
    

    用你的网络接口替换 <interface>,例如 eth0wlan0

  1. 指定抓包数量:

    sudo tcpdump -i <interface> -c <count>
    
    例:抓取100个包后停止
    sudo tcpdump -i eth0 -c 100
    

    这将捕获指定数量的数据包后停止。

  1. 保存捕获的数据包到文件:

    sudo tcpdump -i <interface> -w <filename>
    
    例:将抓取到的数据包保存到 /root/ 目录下的 testfile.pacp 文件里
    sudo tcpdump -i eth0 -w /root/testfile.pacp
    

    这将把捕获的数据包保存到指定的文件中。

  1. 显示捕获的数据包的十六进制和ASCII格式:

    sudo tcpdump -X -i <interface>
    
    例:
    sudo tcpdump -X -i eth0
    
  1. 过滤特定主机的流量:

    sudo tcpdump -i <interface> host <hostname>
    
    例:
    sudo tcpdump -i eth0 host 192.168.88.210
    

    替换 <hostname> 为你想要过滤的主机名。

  1. 过滤特定端口的流量:

    sudo tcpdump -i <interface> port <port>
    
    例:抓取端口号为 8088 的数据包 
    sudo tcpdump -i eth0 port 8088
    

    替换 <port> 为你想要过滤的端口号。

  1. 过滤源或目标IP地址:

    sudo tcpdump -i <interface> src <source_ip>
    
    例: 抓取源IP地址为 192.168.88.210 的数据包
    sudo tcpdump -i eth0 src 192.168.88.210
    

    sudo tcpdump -i <interface> dst <destination_ip>
    
    例:抓取目标IP地址为 192.168.88.210 的数据包
    sudo tcpdump -i eth0 dst 192.168.88.210
    

    替换 <source_ip><destination_ip> 为相应的IP地址。

  1. 过滤特定协议:

    sudo tcpdump -i <interface> icmp
    
    例:只抓取ICMP协议的数据包
    sudo tcpdump -i eth0 icmp
    

    sudo tcpdump -i <interface> tcp
    
    例:只抓取TCP协议的数据包
    sudo tcpdump -i eth0 tcp
    

    替换 icmptcp 为你想要过滤的协议。还支持 httparprarpdnsudp等协议。

  1. 过滤特定网络范围的流量:

    sudo tcpdump -i <interface> net <network>
    
    例:只抓取网段 192.168.88.0/24 的数据包
    sudo tcpdump -i eth0 net 192.168.88.0/24
    

    替换 <network> 为你想要过滤的网络地址。

  1. 显示捕获的数据包的详细信息:

    sudo tcpdump -tttt -i <interface>
    
    例:
    sudo tcpdump -tttt -i eth0
    

    这将显示每个数据包的详细时间戳。

  2. 从 testfile.pacp 记录中读取tcp协议的数据包

    sudo tcpdump -i <interface> <protocol> <option> -r <file.pacp>
    
    例:
    sudo tcpdump -i eth0 tcp -vnn -r /root/testfile.pacp
    
    输出内容结构:
    21:26:49.013621 IP 192.168.88.1.15605 > 192.168.88.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48
    

    从上面的输出来看,可以总结出:

    1. 第一列:时分秒毫秒 21:26:49.013621
    2. 第二列:网络协议 IP
    3. 第三列:发送方的ip地址+端口号,其中 192.168.88.1 是 ip,而15605 是端口号
    4. 第四列:箭头 >, 表示数据流向
    5. 第五列:接收方的ip地址+端口号,其中 192.168.88.2 是 ip,而5920 是端口号
    6. 第六列:冒号
    7. 第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面
  3. 使用逻辑关系过滤数据包

    与 and &&
    或 or ||
    非 not !
    
    例:抓取源IP地址为 192.168.88.210 且 目的端口号是22的数据包(与)
    sudo tcpdump -i eth0 src host 192.168.88.210 and dst port 22
    
    例:抓取源IP地址为 192.168.88.210 或 目的端口号是22的数据包(或)
    sudo tcpdump -i eth0 src host 192.168.88.210 or port 22
    
    例:抓取源IP地址为 192.168.88.210 端口号不是22的数据包(非)
    sudo tcpdump -i eth0 src host 192.168.88.210 not port 22
    

这些只是一些 tcpdump 的基本用法示例。根据你的需求,你可以通过组合不同的过滤选项和标志来执行更复杂的分析。请记住,使用 tcpdump 需要具有足够的权限,通常需要使用 sudo权限或管理员账号 root

目录
相关文章
|
11天前
|
Web App开发 网络协议 数据可视化
tcpdump 和 wireshark 抓包工具 ,介绍、安装、命令使用。 详解三次握手、四次挥手。两个结合使用,会更好分析报文
这篇文章详细介绍了网络抓包工具tcpdump和Wireshark的使用,包括安装、命令选项、过滤器语法,以及如何通过分析TCP的三次握手和四次挥手来理解网络通信细节。
77 1
|
2月前
|
Web App开发 SQL 存储
警惕可能对Windows网络带来风险的工具
警惕可能对Windows网络带来风险的工具
警惕可能对Windows网络带来风险的工具
|
2月前
|
域名解析 运维 监控
网络故障排查的常用工具与方法:技术深度解析
【8月更文挑战第20天】网络故障排查是一项复杂而重要的工作,需要网络管理员具备扎实的网络知识、丰富的实践经验和灵活的问题解决能力。通过掌握常用工具和方法,遵循科学的排查流程,可以显著提高故障排查的效率和准确性。希望本文能为读者在网络故障排查方面提供有益的参考和启示。
|
2月前
|
传感器 监控 安全
网络监控工具的比较与选择:技术视角的深度剖析
【8月更文挑战第19天】网络监控工具的选择需要根据企业的实际需求、功能性能、成本和可维护性等多方面因素进行综合考虑。通过对SolarWinds、Zabbix、PRTG和Nagios等主流网络监控工具的比较,我们可以看到每种工具都有其独特的优势和适用场景。因此,在选择时,请务必根据您的具体情况进行权衡和选择,以确保您能够获得最佳的监控效果和投资回报。
|
2月前
|
监控 安全 网络协议
这10款网络扫描工具,是个网工,都想全部安装!
这10款网络扫描工具,是个网工,都想全部安装!
153 1
|
2月前
|
人工智能 监控 安全
十大优秀反网络钓鱼工具和服务
十大优秀反网络钓鱼工具和服务
|
2月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
|
2月前
|
Prometheus 监控 Cloud Native
在Linux中,有过哪些网络监控工具?
在Linux中,有过哪些网络监控工具?
|
2月前
|
机器学习/深度学习 网络协议 安全
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
|
2月前
|
Rust 监控 Linux
这款开源网络监控工具(sniffnet),太实用了!
这款开源网络监控工具(sniffnet),太实用了!