zoukankan      html  css  js  c++  java
  • 给tcpdump加点颜色看看

    公布一个与tcpdump配合使用的Python脚本。能够为tcpdump的输出结果着色,能够到github围观,或者直接点击这里下载

    https://github.com/voidccc/cccolor 

    具体介绍一下:

    熟悉网络编程的同学一定都知道tcpdump。我们通常使用它截取IP包。然后用wireshark这种浏览工具查看截取的数据包文件。这种工作方式不是太适合实时观察数据。由于数据包要先被截取并转储成文件。然后才干在图形界面下查看。有时候我须要直接在命令行高速查看tcpdump的输出。并通过简单的判读来发现问题,可是假设直接判读tcpdump的输出会有点麻烦。由于IP和TCP的头都是可变长度的,特别是TCP的头常常会包括可选项,这导致TCP头的长度常常不是20字节。所以我们无法使用简单的方法(比方从开头跨过多少字节)迅速定位到应用层的数据开头。比方看到以下的数据。你能第一时间找到应用层socket发送数据的第一个字节位置吗?(右面的可显示字符“GET”已经表明了应用层数据开头,但假设两端都使用的是二进制协议而非基于文本的HTTP。就没这么好的事了)


    当然我们能够翻出IP/TCP头格式(參考wiki IPv4 TCP),然后对比各字段长度。分别找到IP头和TCP头的里代表长度的字段,它们位于以下图中的位置(5和8,单位是4字节)。然后从屏幕上数过对应的字节就能确定应用层数据开头(4745)。可是这真的非常麻烦并且非常浪费时间。即使对于熟知TCP/IP头格式的人来说。也难免会数错啊。


    我如今须要一个能输出彩色的tcpdump,它在输出的时候。使用不同的颜色来分别表示IP头,TCP头以及应用层数据段。这让我能够一眼就看明确应用层通过socket收发的数据,而不是靠人肉的方式逐个字节数,通过终于效果能够看到彩色的tcpdump很好用!


    上面使用的是缺省配色,这适合大多数人使用:红色是IP头,绿色是TCP头的定长部分,黄色是TCP头的可变长部分,就可以选项。白色就是应用层socket数据。因为着色是可配置的。所以假设你想区分头部更具体的各个字段,全然能够做到以下五颜六色的配色,囧......


    其原理很easy。我使用一段Python脚本通过管道读取tcpdump的输出。将对应数据段着色后,又一次输出至屏幕。使用方法也简单,仅仅要在原有tcpdump命令的后端加一个管道送给本脚本处理一下就可以。

    假设你的tcpdump命令像以下这样

    tcpdump 'dst port 80' -i eth1 -nn -X -l

    加一个管道,送给脚本就可以。像这样

    tcpdump 'dst port 80' -i eth1 -nn -X -l | cccolor

    是不是非常方便呢,要使用它,仅仅要把单文件脚本复制到PATH所在文件夹,然后直接在命令行使用就能够了。因为时间仓促我没有实现Python3版本号。当前版本号在 Python 2.7.6 和Python 2.6.6没什么问题。我装模作样使用了最宽松的MIT licence。非常欢迎感兴趣的小伙伴提出建议,或者一起来完好开发其它有趣的功能。

  • 相关阅读:
    keil 提示"running with code size limit 32k"
    关于C语言编译出现give arg types警告问题
    windows10添加设备管理器的快捷方式到桌面
    deepin20社区版 安装 STM32CubeIDE 小记
    STM32开发 printf和scanf函数的重定向——修改HAL标准库用printf函数发送数据直接输出
    ardupilot环境配置之eclipse指定jdk版本启动,解决“Version XXXX of the JVM is not ......"报错的问题
    jdk9,10,11,12没有jre安装方法
    C++ 类构造函数 & 析构函数
    STM32 Keil中关于stlink的调试 下载设置
    STM32 SWD下载出现no target connect解决方法
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6904606.html
Copyright © 2011-2022 走看看