• tcpdump 抓包快速上手


    个人博客

    当前任何的计算机系系统,不可能不通过网络传输数据,逻辑上的一个系统,在物理世界往往对应若干小系统——一个集群。对外需要与其他系统交换信息,对内各小系统也需要互相交换信息。世界就是这样联结在一起的。

    对于一个确定的系统,通过日志来观察系统往往不那么确定,因为日志仅仅揭示了系统的很小一部分运行时行为,更大的一部分依旧隐藏在黑暗里——想想单步调试 springboot 的调用过程,更别说 cpu 执行的指令序列了。这是采用自底向上方法论,对计算逻辑进行层层抽象所不可避免带来的问题。

    相比于日志揭示的不确定性,网络则显得确定得多,通过抓包,可以完整地观察到网络的所有行为,快速定位请求停留在哪个节点上,不存在没有对应报文的行为。

    进入云原生时代后,往往建议通过调用链跟踪或者指标监控来进行问题定位,存在同样的问题——调用链和指标都只揭示了系统运行行为空间的一部分,很多时候还是需要结合抓包来做进一步分析,但云环境对抓包行为的支持不是太理想,这是目前感到束手束脚的一个地方。

    windows 系统一般可以采用 wireshark 或者 network monitor 进行抓包。linux 系统则可以采用自带的命令行工具 tcpdump。

    过滤表达式格式(tcpdump -i eth0 "ip and udp")

    • 协议类型:tcp/udp/ip/ip6/icmp/icmp6/...
    • 协议字段:ether src ; ether dst ; src host ; dst host ; src net ; src port ; ...
    • 报文某处值:ip[0:2]=0xcafe,ip报文的头两个字节为16进制的cafe ; ether[0]=0xca,帧的头一个字节为16进制的ca ;  ether[0] & 1 = 0 and ip[16] >= 224,筛选条件的组合使用 ; tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0),这是一个复杂一些的例子 ; ...

    大部分情况下,采用以下选项组合组合就够用了

    参数说明
    -i  eth0监听 eth0 接口
    -n不进行 rarp 转换
    -s0不限制抓取的报文大小
    -w 写入文件
    "dst host "限定目标地址
    "src host 限定源地址
    -c 100抓取前 100 个报文
    "dst port 22"限制目标端口
    "src net 192.168.1.0/24"限制源网段
    "(src port 21) and (dst port 22)"
    or
  • 相关阅读:
    Linux Redis 源码安装
    【数学建模学习笔记【集训十天】之第七天】
    react中hook的useState
    00后整顿职场?网传一公司反手成立“专管00后部门”
    Fedora安装并配置开启SSH服务相关命令
    Leo赠书活动-09期 【如何拿下数学】文末送书
    卧式铣床升降台主传动系统设计(说明书+翻译及原文+cad图纸+proe三维图纸)
    微信小程序毕业设计_论文校园活动报名管理系统+后台管理_项目源代码
    file-storage-sdk项目开发中的踩坑记录
    Windows 桌面窗口管理器
  • 原文地址:https://blog.csdn.net/alading2009/article/details/126904778