首页 > 系统相关 >tcpdump一个命令的剖析

tcpdump一个命令的剖析

时间:2022-11-28 15:33:48浏览次数:72  
标签:nt 接口 剖析 命令 顺序号 数据包 tcpdump 网络接口

 

简单介绍:
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
[ -C file_size ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -Z user ]
[ expression ]
一个命令的剖析:
tcpdump –i ehho0 –Afs 1500 
tcpdump -nqt -s 0 -A -i eth0 port 5060 |grep AMR

 

-A  以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages).
-f  显示外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, 非本机ip地址), 采用数字方式而不是名字.(此选项是用来对付Sun公司的NIS服务器的缺陷(nt: NIS, 网络信息服务,
tcpdump 显示外部地址的名字时会用到她提供的名称服务): 此NIS服务器在查询非本地地址名字时,常常会陷入无尽的查询循环).

由于对外部(foreign)IPv4地址的测试需要用到本地网络接口(nt: tcpdump 抓包时用到的接口)及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用,
或者此接口根本就没有设置相应网络地址和网络掩码(nt: linux 下的 'any' 网络接口就不需要设置地址和掩码, 不过此'any'接口可以收到系统中所有接口的数据包), 该选项不能正常工作.
-i  interface

指定tcpdump 需要监听的接口. 如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.

在采用2.2版本或之后版本内核的Linux 操作系统上, 'any' 这个虚拟网络接口可被用来接收所有网络接口上的数据包(nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的). 需要注意的是如果真实网络接口不能工作在'混杂'模式(promiscuous)下,则无法在'any'这个虚拟的网络接口上抓取其数据包.

如果 -D 标志被指定, tcpdump会打印系统中的接口编号,而该编号就可用于此处的interface 参数.
-n  不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.
-q  快速(也许用'安静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.
-S  打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.(nt: 相对顺序号可理解为, 相对第一个TCP 包顺序号的差距,比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和 2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:232324, 232325).

-s snaplen
设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(而支持网络接口分接头(nt: NIT, 上文已有描述,可搜索'网络接口分接头'关键字找到那里)的SunOS系列操作系统中默认的也是最小值是96).68字节对于IP, ICMP(nt: Internet Control Message Protocol,因特网控制报文协议), TCP 以及 UDP 协议的报文已足够,
但对于名称服务(nt: 可理解为dns, nis等服务), NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现''[|proto]''的标志(proto 实际会显示为被截短的数据包的相关协议层次).
需要注意的是, 采用长的抓取长度(nt: snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.
把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.
-t     在每行输出中不打印时间戳

 最近在用tcpdump对tcp的相关参数进行学习和分析,linux下的抓包结果起初让我感到奇怪,我手边的ubuntu和debian都出现了相同的现象。

25:7265,接收方回复的ack里却有序列号是2921的。并且ack后确认的序列号是按照等差的规律递增。

  找了一段时候,还是在stackoverflow​​http://stackoverflow.com/a/2351026/1429809​​上找到了解答,是因为linux打开了gso(generic segmentation offload)选项,只要将这个选项关闭就可以让tcpdump的输出恢复正常了。具体步骤如下

  查看系统相关选项

  ethtool -k eth0 

  关闭gso

  ethtool -K eth0 gso off



标签:nt,接口,剖析,命令,顺序号,数据包,tcpdump,网络接口
From: https://blog.51cto.com/u_15147537/5891367

相关文章

  • Java命令行实用工具jps和jstat 专题
    在Linux或其他UNIX和类UNIX环境下,ps命令想必大家都不陌生,我相信也有不少同学写过psaux|grepjava|grep-vgrep|awk'{print$2}'这样的管道命令来找出Java进程的p......
  • lsmod命令
    lsmod命令用来列出当前系统加载的模块,可以当作硬件模块浏览器。使用权限:格式:lsmod[-hV]主要选项:-h:显示帮助信息。-V:显示软件版本信息。应用说明:使用lsmod命令必须安......
  • LDAP常用命令解析
    ldapadd-x  进行简单认证-D  用来绑定服务器的DN-h  目录服务的地址-w  绑定DN的密码-f  使用ldif文件进行条目添加的文件例子ldapadd-x-D"cn=r......
  • 来自实践中的教训,有时候纯ffmpeg命令并不好使,还得需要ffmpy包装器
    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。本文是ffmpeg使用的第二篇文章,主要是关于ffmpy的使用。干货满满,建议收藏,需要用到时常看看。小伙伴们如有问题及需要,欢迎......
  • 2022年最新整理的Linux命令大全,超级详细版!
    一、基础知识1.1Linux系统的文件结构/bin二进制文件,系统常规命令/boot系统启动分区,系统启动时读取的文件/dev设备文件/etc大多数配置文件/......
  • 锐捷、华为设备基础命令对比
    锐捷华为pingpingtraceroutetracertshowdisplayshowinterfacesdisplayinterfaceshowiproutedisplayrouting-tableshowipinterfacedispl......
  • 思科设备STP、RSTP配置命令
    Cisco(config)#spanning-treevlan10 //激活特定vlan的STPCisco(config)#spanning-treevlan10priority0 //配置桥优先级,默认为32768,必须是4096的倍数Cisco(conf......
  • 思科华为设备STP、RSTP配置命令对比
    Cisco(config)#spanning-treevlan10 //激活特定vlan的STP[Huawei]stpenable//使能交换设备的STP/RSTP功能Cisco(config)#spanning-treevlan10priority0 //配......
  • 单体分层应用架构剖析
    分层单体架构风格是分层思想在单体架构中的应用,其关注于技术视角的职责分层。同时,基于不同层变化速率的不同,在一定程度上控制变化在系统内的传播,有助于提升系统的稳定性。但......
  • 设计模式之命令模式
    概述在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,特别希望能够以一种松耦合的方式来设......