网络/命令行抓包工具tcpdump详解 客官°小女子只卖身不卖艺 2022-09-05 04:13 520阅读 0赞 # 概述 # 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 tcpdump基于底层libpcap库开发,运行需要root权限。 # 一、tcpdump安装 # 1. 环境 虚拟机:vmware 15.5.2 os: ubuntu 12.04 2. 安装tcpdump sudo apt-get install tcpdump ![faa9d121bf5a6478be20ccada7dabf64.png][]3. 版本查看 tcpdump --h ![9fbf14b4454f2e2df8b9e48817b9701f.png][]tcpdump version 4.0。 libpcap version 1.1.1 表示libpcap的版本。 # 二、tcpdump参数 # 常用参数选项说明: <table> <thead> <tr> <th>参数</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>-a</td> <td>将网络地址和广播地址转变成名字</td> </tr> <tr> <td>-c</td> <td>在收到指定的包的数目后,tcpdump就会停止;</td> </tr> <tr> <td>-d</td> <td>将匹配信息包的代码以人们能够理解的汇编格式给出;以可阅读的格式输出。</td> </tr> <tr> <td>-dd</td> <td>将匹配信息包的代码以c语言程序段的格式给出;</td> </tr> <tr> <td>-ddd</td> <td>将匹配信息包的代码以十进制的形式给出;</td> </tr> <tr> <td>-e</td> <td>在输出行打印出数据链路层的头部信息;</td> </tr> <tr> <td>-f</td> <td>将外部的Internet地址以数字的形式打印出来;</td> </tr> <tr> <td>-l</td> <td>使标准输出变为缓冲行形式;</td> </tr> <tr> <td>-n</td> <td>直接显示IP地址,不显示名称;</td> </tr> <tr> <td>-nn</td> <td>端口名称显示为数字形式,不显示名称;</td> </tr> <tr> <td>-t</td> <td>在输出的每一行不打印时间戳;</td> </tr> <tr> <td>-v</td> <td>输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;</td> </tr> <tr> <td>-vv</td> <td>输出详细的报文信息;</td> </tr> <tr> <td>-F</td> <td>从指定的文件中读取表达式,忽略其它的表达式;</td> </tr> <tr> <td>-i</td> <td>指定监听的网络接口;</td> </tr> <tr> <td>-r</td> <td>从指定的文件中读取包(这些包一般通过-w选项产生);</td> </tr> <tr> <td>-w</td> <td>直接将包写入文件中,并不分析和打印出来;</td> </tr> <tr> <td>-T</td> <td>将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单 网络管理协议;)</td> </tr> </tbody> </table> 三、命令选项使用举例 # # ## 1. 截获主机收到和发出的所有数据包。 ## 命令: tcpdump 说明: tcpdump截取包默认显示数据包的头部。 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。 基础格式:时间 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息![c377501ffb3766cccd1b850e513b6101.png][] 按下Ctrl+C会终止tcpdump命令。且会在结尾处生成统计信息。 ![d0ee6ef110ac1b4e576cd332bac6ecd3.png][] 终止tcpdump ## 2. 指定抓包数量 -c ## 指定抓取2个数据包。 命令: tcpdump -c 2 说明: 最后会自动生成统计信息。![e01dff06a5b01061e01014224b21c62b.png][]【注意,已经切换到管理员了,虚拟机中要产生数据包,可以另外开一个窗口ping baidu.com后面不再提示】 ![a6cbe3e36ed0af720f55e70b01010993.png][] ping baidu.com ## 3. 将抓包信息写入文件 -w ## 使用-w选项指定记录文件。 命令: tcpdump -c 10 -w tcpdump_test.log 说明: 保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是几乎所有主流的抓包工具软件都可以读取。所以可以使用更易读的图形界面工具来查看记录文件。![cc03af3c34319f350e90490905377df6.png][] ## 4. 读取记录文件 -r ## 使用-r选项读取文件。 命令: tcpdump -r tcpdump_test.log !\[读取记录文件![78ea17877c5493011c652bca67bf066f.png][] ## 5. 打印出所有可工作的接口 -D ## 命令: tcpdump -D ![a3ea74cbc7f9c4554fec2986a0eaba25.png][]其中网卡为eth0。 ## 6. 指定监控的网卡 -i ## 命令: tcpdump -i eth0 如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0。 ## 7. 显示更详细的数据包信息 -v -vv ## 选项-v,-vv可以显示更详细的抓包信息。 ![e4962710c5bd491eea61314d23ba575f.png][] tcpdump -v ![469e56789affeb40378aaffff6222fc0.png][] tcpdump -vv ## 8. 不使用域名反解 -n ## 使用-n后,tcpdump会直接显示IP地址,不会显示域名(与netstat命令相似)。 ## 9. 增加抓包时间戳 -tttt选项 ## tcpdump的所有输出打印行中都会默认包含时间戳信息;时间戳信息的显示格式如下 hh:mm:ss.frac (nt: 小时:分钟:秒.) 此时间戳的精度与内核时间精度一致, 反映的是内核第一次看到对应数据包的时间; 而数据包从物理线路传递到内核的时间, 以及内核花费在此包上的中断处理时间都没有算进来; 使用-tttt选项,抓包结果中将包含抓包日期: 命令: tcpdump -tttt ![24bac97b14deba96290c78069f23f372.png][] 增加抓包时间戳 # 四、条件过滤 # ## 1. 过滤:指定需要抓取的协议 ## tcpdump可以只抓某种协议的包,支持指定以下协议:**「ip,ip6,arp,tcp,udp,wlan」**等。 命令: tcpdump udp tcpdump icmp tcpdump tcp tcpdump arp ## 2. 过滤:指定协议的端口号 ## 使用port参数,用于指定端口号。 命令:tcpdump tcp port 80 使用portrange参数,用于指定端口范围。 命令:tcpdump tcp portrange 1-1024 ## 3. 过滤:指定源与目标 ## src 表示源。 dst 表示目标。 命令: tcpdump src port 8080 tcpdump dst port 80 ## 4. 过滤:指定特定主机的消息包 ## 使用host指定需要监听的主机。 命令: tcpdump host 192.168.1.113 注意:若使用了host参数使用了计算机名或域名。例tcpdump host shi-pc ,则无法再使用-n选项。 ## 5. 过滤:指定数据包大小 ## 使用greater(大于)与less(小于)可以指定数据包大小的范围。 **「例:只抓取大于1000字节的数据包。」** 命令: tcpdump greater 1000 **「例:只抓取小于10字节的数据包。」** 命令: tcpdump less 10 # 五、 逻辑表达式 # 使用基本逻辑组合拼装出更精细的过滤条件。 ## 1. 逻辑与 ## 逻辑与关系,使用and。 命令: tcpdump tcp and host 192.168.1.112 tcpdump tcp and src 192.168.1.112 and port 8080 ## 2. 逻辑或 ## 逻辑或关系,使用or。 命令: tcpdump host 192.168.1.112 or 192.168.1.113 ## 3. 逻辑非 ## 逻辑非关系,使用not,也可以使用 ! 。 若使用 ! 必须与其后面的字符隔开一个空格。 例:当通过ssh协议远程使用tcpdump时,为了避免ssh的数据包的输出,所以一般需要禁止ssh数据包的输出。 命令: tcpdump not tcp port 22 tcpdump ! tcp port 22 ## 4. 括号 ## 括号需要使用在引号内,或转意使用。否则会报错。 例:抓取非22端口,且主机为192.168.1.112 和 192.168.1.113的TCP数据包。 命令: tcpdump not tcp port 22 and host 192.168.1.112or192.168.1.113 tcpdump "not tcp port 22 and host (192.168.1.112 or 192.168.1.113)" tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)" # 六、其他实例 # ## 1. 打印所有进入或离开sundown的数据包. ## tcpdump host sundown ## 2. 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信 ## tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) ## 3. 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: ## tcpdump ip host 210.27.48.1 and ! 210.27.48.2 ## 4. 监视所有送到主机hostname的数据包 ## tcpdump -i eth0 dst host hostname ## 5. 获取主机210.27.48.1接收或发出的telnet包 ## 23为telnet的端口 tcpdump tcp port 23 and host 210.27.48.1 ## 6. 监视本机的udp 123 端口 ## 123 为ntp的服务端口 tcpdump udp port 123 ## 7. 使用tcpdump抓取HTTP包 ## tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 * 0x4745 为"GET"前两个字母"GE", * 0x4854 为"HTTP"前两个字母"HT"。 tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。 显然这不利于分析网络故障,通常的解决办法是先使用带\*\*-w参数的tcpdump 截获数据并保存到文件中\*\*,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。 # 六、查看数据包完整内容 # tcpdump默认不显示数据包的详细内容。 ## 方法一: ## 使用-A参数能以ASCII码显示数据包。 例:只抓取1个数据包,并显示其内容。 命令: tcpdump -c 1 -A ![ac815385d851df2b2f1f775c584312a5.png][] ## 方法二: ## 使用-X参数能16进制数与ASCII码共同显示数据包。 例:只抓取1个数据包,并显示其内容。 命令: tcpdump -c 1 -X ![99ff1c79c18e7b5860cdc220d1a95292.png][] # 七、tcpdump 与wireshark # Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具,现在也有Linux版本。 通过Tcpdump抓取的数据包分析比较麻烦,要想很方便的分析数据包, 我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。 保存数据包为wireshark能识别的文件: tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap <table> <thead> <tr> <th>参数</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>tcp</td> <td>ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型</td> </tr> <tr> <td>-i eth1</td> <td>只抓经过接口eth1的包</td> </tr> <tr> <td>-t</td> <td>不显示时间戳</td> </tr> <tr> <td>-s 0</td> <td>抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包</td> </tr> <tr> <td>-c 100</td> <td>只抓取100个数据包</td> </tr> <tr> <td>dst port ! 22</td> <td>不抓取目标端口是22的数据包</td> </tr> <tr> <td>src net 192.168.1.0/24</td> <td>数据包的源网络地址为192.168.1.0/24</td> </tr> <tr> <td>-w ./target.cap</td> <td>保存成cap文件,方便用ethereal(即wireshark)分析</td> </tr> </tbody> </table> **免责声明:**本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。 \------------ **END** ------------ ![71353fdeda8427c0de76bf3af5df0000.gif][] [**●嵌入式专栏精选教程**][Link 1] [**●精选汇总 | ST工具、下载编程工具**][_ ST] [**●精选汇总 | 嵌入式软件设计与开发**][Link 2] [**●精选汇总 | STM32、MCU、单片机**][_ STM32_MCU] **欢迎关注我的公众号,**回复“**加群**”按规则加入技术交流群,回复“**1024**”查看更多内容。 **欢迎关注我的视频号:** ![ab758453920857eb0e5b275a98dfe4ea.png][] 点击“**阅读原文**”查看更多分享,欢迎**点分享、收藏、点赞、在看。** [faa9d121bf5a6478be20ccada7dabf64.png]: /images/20220829/3dd11621907f4fd2ab073c6cfd5dbf70.png [9fbf14b4454f2e2df8b9e48817b9701f.png]: /images/20220829/fa6a0fb6bb734b45b9fc01c25cff5db8.png [c377501ffb3766cccd1b850e513b6101.png]: /images/20220829/c896ae16818e4310bd4023fbc6f72cab.png [d0ee6ef110ac1b4e576cd332bac6ecd3.png]: /images/20220829/066a6b6f6789419eacf5897f38898a3e.png [e01dff06a5b01061e01014224b21c62b.png]: /images/20220829/e6641dca22124ee8a225dbc5984ce1d5.png [a6cbe3e36ed0af720f55e70b01010993.png]: /images/20220829/ff3cae75ec1949ca9e3c95376d1d476d.png [cc03af3c34319f350e90490905377df6.png]: /images/20220829/3c1cf1799f774275ac835ed32bb08ace.png [78ea17877c5493011c652bca67bf066f.png]: /images/20220829/08fc60550af44413a641498a8183ae45.png [a3ea74cbc7f9c4554fec2986a0eaba25.png]: /images/20220829/1dccc884bda542f9888a22ffdcfbbf5a.png [e4962710c5bd491eea61314d23ba575f.png]: https://img-blog.csdnimg.cn/img_convert/e4962710c5bd491eea61314d23ba575f.png [469e56789affeb40378aaffff6222fc0.png]: /images/20220829/ac8429abe6514840b03cb3f432a2b823.png [24bac97b14deba96290c78069f23f372.png]: /images/20220829/8b2f11a8ba6e4cec8f63ef283b3498f1.png [ac815385d851df2b2f1f775c584312a5.png]: /images/20220829/860c5c0de841458baa5da685247ad2a5.png [99ff1c79c18e7b5860cdc220d1a95292.png]: /images/20220829/0d82270aaa844ff8b8cd592292d10684.png [71353fdeda8427c0de76bf3af5df0000.gif]: /images/20220829/a1c0fe60e975475cb7180ee6ed1a7670.png [Link 1]: http://mp.weixin.qq.com/s?__biz=MzUxNjgxMDE4OQ%3D%3D&chksm=f9a0e80eced761189daea6e7b2d245fae32d117caa0b4af8f770c1f15a9c8b27c5a7e701d02e&idx=3&mid=2247490732&scene=21&sn=fe17751c678c2d0451956f6ce16bfa45#wechat_redirect [_ ST]: https://mp.weixin.qq.com/s?__biz=MzI4MDI4MDE5Ng%3D%3D&idx=3&mid=2247500196&scene=21&sn=e91f59c8aa8efe6c6d697fb97ba5ba56#wechat_redirect [Link 2]: https://mp.weixin.qq.com/s?__biz=MzI4MDI4MDE5Ng%3D%3D&idx=2&mid=2247502904&scene=21&sn=c1f461b14949c53d3916ea1c2be4b629#wechat_redirect [_ STM32_MCU]: https://mp.weixin.qq.com/s?__biz=MzI4MDI4MDE5Ng%3D%3D&idx=3&mid=2247502904&scene=21&sn=c42a2f88226fda826e097c90c9dbb655#wechat_redirect [ab758453920857eb0e5b275a98dfe4ea.png]: /images/20220829/542585d9adee4b87b97e6e1245f7fd53.png
还没有评论,来说两句吧...