Linux基础学习之利用tcpdump抓包实例代码

简介

很多时候我们的系统部署在Linux系统上面,在一些情况下定位问题就需要查看各个系统之间发送数据报文是否正常,下面我就简单讲解一下如何使用tcpdump抓包

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。

?

tcpdump - dump traffic on a network

tcpdump的命令格式

tcpdump的参数众多,通过man tcpdump可以查看tcpdump的详细说明,这边只列一些自己常用的参数:

?

tcpdump [-i 网卡] -nnAX '表达式'

各参数说明如下:

  • -i:interface 监听的网卡。
  • -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
  • -A:以ascii的方式显示数据包,抓取web数据时很有用。
  • -X:数据包将会以16进制和ascii的方式显示。
  • 表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。

例子

不指定任何参数

监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。

?

tcpdump

监听特定网卡

?

tcpdump -i en0

监听特定主机

例子:监听本机跟主机182.254.38.55之间往来的通信包。

备注:出、入的包都会被监听。

?

tcpdump host 182.254.38.55

特定来源、目标地址的通信

特定来源

?

tcpdump src host hostname

特定目标地址

?

tcpdump dst host hostname

如果不指定src跟dst,那么来源 或者目标 是hostname的通信都会被监听

?

tcpdump host hostname

特定端口

?

tcpdump port 3000

监听TCP/UDP

服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包

?

tcpdump tcp

来源主机+端口+TCP

监听来自主机123.207.116.169在端口22上的TCP数据包

?

tcpdump tcp port 22 and src host 123.207.116.169

监听特定主机之间的通信

?

tcpdump ip host 210.27.48.1 and 210.27.48.2

210.27.48.1除了和210.27.48.2之外的主机之间的通信

?

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

稍微详细点的例子

?

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

       (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

       (2)-i eth1 : 只抓经过接口eth1的包

       (3)-t : 不显示时间戳

       (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包

       (5)-c 100 : 只抓取100个数据包

       (6)dst port ! 22 : 不抓取目标端口是22的数据包

       (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24

       (8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

抓http包

TODO

限制抓包的数量

如下,抓到1000个包后,自动退出

?

tcpdump -c 1000

保存到本地

备注:tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘

?

tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap

也可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)

实战例子

先看下面一个比较常见的部署方式,在服务器上部署了nodejs server,监听3000端口。nginx反向代理监听80端口,并将请求转发给nodejs server(127.0.0.1:3000)。

浏览器 -> nginx反向代理 -> nodejs server

问题:假设用户(183.14.132.117)访问浏览器,发现请求没有返回,该怎么排查呢?

步骤一:查看请求是否到达nodejs server -> 可通过日志查看。

步骤二:查看nginx是否将请求转发给nodejs server。

?

tcpdump port 8383

这时你会发现没有任何输出,即使nodejs server已经收到了请求。因为nginx转发到的地址是127.0.0.1,用的不是默认的interface,此时需要显示指定interface

?

tcpdump port 8383 -i lo

备注:配置nginx,让nginx带上请求侧的host,不然nodejs server无法获取 src host,也就是说,下面的监听是无效的,因为此时对于nodejs server来说,src host 都是 127.0.0.1

?

tcpdump port 8383 -i lo and src host 183.14.132.117

步骤三:查看请求是否达到服务器

?

tcpdump -n tcp port 8383 -i lo and src host 183.14.132.117

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://segmentfault.com/a/1190000012593192

原创文章,作者:CAOSN,如若转载,请注明出处:http://www.wangzhanshi.com/n/6520.html

(0)
CAOSN的头像CAOSN
上一篇 2025年1月1日 16:22:31
下一篇 2025年1月1日 16:22:33

相关推荐

  • Linux 命令神器:lsof

    lsof是系统管理/安全的尤伯工具。我大多数时候用它来从系统获得与网络连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“…

    2025年1月1日
  • 微信小程序 Linux开发环境设置详解

    微信小程序 Linux开发环境 微信小程序开发工具是用nw.js实现的,这玩意本来就可以跨平台的。搞不懂为什么微信只出了windows和mac版。今天我捣腾了一下,可以在linux…

    Linux 2025年1月1日
  • Linux用make指令编译进度条程序

    本文实例为大家分享了Linux下写一个简单进度条的具体代码,供大家参考,具体内容如下 首先建立一个新的文件,touch progress_bar.c 执行该vim progress…

    2025年1月1日
  • Linux下的TCP测试工具

    如何在 Linux 上安装 tcpping 测量到远程主机的网络延迟的一种常用方法是使用ping应用程序。该ping工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机的往…

    2025年1月1日
  • linux vps服务器常用服务iptables策略

    vps服务器裸奔在公网上,总感觉有点不安全,没办法总得整点措施来加固下服务器呀,安全第一。linux系统自带防火墙必须要好好利用起来,可是我有一年多没写过防火墙策略了,该忘的都忘了…

    Linux 2025年1月1日
  • Linux系统中如何将普通用户权限提升至root权限

    首先重来就没有设置过ROOT用户 1.使用普通用户登录后输入以下命 su – 输入命令: su -,此时输入当前用户的密码(root用户没有修改过密码,那么就是当前用户的密码)。 …

    2024年12月17日
  • Bash中文件描述符的详细介绍

    前言 linux将所有内核对象当做文件来处理,系统用一个size_t类型来表示一个文件对象,比如对于文件描述符0就表示系统的标准输入设备stdin,通常情况下stdin的值为键盘,…

    2025年1月1日
  • 详解Linux环境下NodeJS的安装配置(HelloWorld)

    最简单的环境安装,测试helloworld。给初学者!! 安装脚本,请仔细阅读逐行执行: ? #!/bin/bash   #检查是否已经安装 rpm -qa | grep pyth…

    Linux 2025年1月1日
  • Linux与Windows编码不一致的解决方案

    Windows编码无法修改,修改linux的编码,使之与windows编码一致。 查看windows编码格式,打开cmd ? chcp 找到对应的活动代码页 ? 52936  简体…

    Linux 2025年1月1日
  • 浅谈find命令下的atime,ctime,mtime

    linux下的find命令在目录结构中搜索文件,并执行指定的操作。linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我…

    2025年1月1日

发表回复

登录后才能评论