vlambda博客
学习文章列表

tcpdump:网络协议栈“釜底抽薪”

tcpdump:网络协议栈“釜底抽薪”tcpdump:网络协议栈“釜底抽薪”tcpdump:网络协议栈“釜底抽薪”


小E:网络协议栈干什么用的?


太好解释了。信件包的信封邮票,包裹包的袋子箱子快递单,网络协议栈干的是邮递员、分拣员的活,大物件不能散了,小物件不能丢了,各家的快递还得找到各家,有的快递里三层外三层算是加密,有时候还要收费算是计费功能吧。


下图所示为通信网络协议栈的示意,tcpdump是从第1层与第2层之间的接口上复制的数据,最底层的包裹的最严实,所有的网络数据都在这里,真正的“釜底抽薪”。


tcpdump:网络协议栈“釜底抽薪”


tcpdump:网络协议栈“釜底抽薪”tcpdump:网络协议栈“釜底抽薪”tcpdump:网络协议栈“釜底抽薪”


tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ]               [ -T type ] [ -w file ] [ expression ]
-a //试着 把 网络和广播地址 转换成 名称.-c     //当 收到 count 数量 的报文 后 退出.-d     //把 编译好的 报文匹配代码 (packet-matching code) 翻译成 可读形式, 传往 标准输出, 然后退出.-dd    //把 报文匹配代码 (packet-matching code) 以 C 程序片断 的 形式 输出.-ddd   //把 报文匹配代码 (packet-matching code) 以 十进制数 形式 输出 (前面 加上 总数).-e     //显示 链路层报头.-f     //以 数字形式 显示 '外部的' 互联网地址, 而不是 字符形式 (这个 选项 用来 绕开 脑壳坏光的 SUN 黄页服务器 的 问题 — 一般说来 当它 翻译 外部网络 的 数字地址 时 会长期挂起).-F     //把 file 的内容 用作 过滤表达式. 忽略 命令行 上 的 表达式.-i     //监听 interface.  如果 不指定 接口, tcpdump 在 系统 的 接口 清单 中, 寻找 号码最小, 已经 配置好的 接口 (loopback 除外). 选中的时候 会 中断 连接.-l     //行缓冲 标准输出. 可用于 捕捉 数据 的 同时 查看 数据. 例如,         ``tcpdump  -l  |  tee dat'' or ``tcpdump  -l   > dat  &  tail  -f  dat''.-n     //不要把 地址 转换成 名字 (指的是 主机地址, 端口号等)-N     //不显示 主机名字 中的 域名 部分. 例如, 如果 使用 这个 选项, tcpdump 只显示 ``nic'', 而不是 ``nic.ddn.mil''.-O     //禁止运行 报文匹配代码 的 优化器. 这个选项 只有 当你 怀疑 优化器 有 bug 时 才有用.-p     //禁止 把 接口 置成 promiscuous(杂凑) 模式. 注意, 接口 有可能 因 其他原因 而 处于 promiscuous 模式; 因此, '-p' 不能 作为 `ether host {local-hw-addr} 或 ether broadcast' 的 简写.-q     //快速输出. 显示 较少的 协议信息, 输出行 会 短一点点.-r     //从 file 中 读入 数据报 (文件 是用 -w 选项 创建的).  如果 file 是 ``-'', 就从 标准输入 读入.-s     //从每个  报文  中  截取  snaplen  字节的数据,  而不是 缺省的 68 (如果是 SunOS 的 NIT, 最小值是 96). 68 个字节 适用于 IPICMPTCP 和 UDP, 但是 有可能 截掉 名字服务器 和 NFS 报文 的 协议 信息 (见下文). 输出时 如果指定 ``[|proto]'', tcpdump 可以 指出 那些 捕捉量过小 的 数据报, 这里的 proto 是 截断发生处 的 协议层 名称. 注意, 采用 更大的 捕捉范围 不但 增加了 处理 报文 的 时间, 而且 减少了 报文的 缓冲 数量, 可能 导致 报文的丢失. 你 应该 把 snaplen 设的 尽量小, 只要 能够 容纳 你 需要 的 协议信息 就可以了.-T //把 通过 "expression" 挑选出来的 报文 解释成 指定的 type. 目前 已知 的 类型 有: rpc (远程过程调用 Remote Procedure Call), rtp (实时应用协议 Real-Time Applications protocol), rtcp (实时应用控制协议 Real-Time Applications control protocol), vat (可视音频工具 Visual Audio Tool), 和 wb (分布式白板 distributed White Board).-S     //显示 绝对的, 而不是 相对的 TCP 流序号.-t     //禁止 显示 时戳标志.-tt    //显示 未格式化的 时戳标志.-v     //(稍微多一点) 繁琐的输出. 例如, 显示 IP 数据报 中的 生存周期 和 服务类型.-vv    //更繁琐的输出. 例如, 显示 NFS 应答报文 的 附加域.-w     //把 原始报文 存进 file, 不做 分析 和 显示. 它们 可以 以后 用 -r 选项 显示. 如果 file 是 ``-'', 就 写往 标准输出. 直接将包写入文件中(即原始包,如果使用 重定向 > 则只是保存显示的结果,而不是原始文件)-x     //以 16 进制数 形式 显示 每一个 报文 (去掉链路层报头后) .  可以 显示 较小的 完整 报文, 否则 只 显示 snaplen (96)个 字节 .
//较新的还有以下好用的命令-X //需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示)-vvv    //更详细的输出
//一些关键字 用''引起来src , dst , port , tcp , udp , fddi , ip , arp , rarp


tcpdump:网络协议栈“釜底抽薪”tcpdump:网络协议栈“釜底抽薪”


重剑无锋 大巧不工