您现在的位置是:首页 >其他 >gmac和tcpdump的抓包位置,tcpdump的抓包原理网站首页其他
gmac和tcpdump的抓包位置,tcpdump的抓包原理
套接字 | udp/tcp/arp | |
协议栈 | tcpdump所在层次,抓的是协议层的包 | |
gmac | 信令层 | |
光网口 | 物理层 |
tcpdump是Linux里的字符界面的数据抓包分析软件。tcpdump是一个用于截取网络分组,并输出分组内容的工具。
tcpdump:其中tcp:传输控制协议,位于传输层transmission control protocol。dump:导出。
-i | interface指定抓哪个接口的数据包。 |
-vv | 显示更加详细的信息。 |
-e | 显示mac地址。 |
-w | write 写入保存到文件中。导入的文件可以使用wireshark打开。 |
-r | read 读取文件中的数据。 |
-c | 在收到指定包数目之后,tcpdump就会停止。 |
抓固定端口的包 port xxx
抓固定目标ip的包 dst host 192.254.2.16
1. tcpdump抓包架构
2. 从内核层面看tcpdump抓包流程
众所周知,应用在接收报文的时候,硬件的硬中断首先触发内核的 软中断 ,通过 内核驱动程序 进入 网络设备层 进行数据包的处理,然后数据包进入 协议栈 的网络层和传输层,最后被用户进程接收。
而应用在发送报文时,首先经过内核的 协议层 ,由邻居子系统实现L3层ip地址转化为L2层mac地址,然后进入 网络设备层 ,数据包处理完成后,经 驱动程序 流转,最后由 硬件 将报文发出。
tcpdump为了能抓取数据包,首先需要创建socket套接字,用于在应用系统接收和发送报文时获取抓取的数据包,然后将过滤条件也就是对应的BPF程序注入到内核网络设备层,获取过滤后的数据包后再进行格式化处理。
说明
在生产中常见的,如果单个cpu核心被持续打满,会影响内核将网络包从队列中取出,并存放到协议栈,从而导致机器响应包延迟
在硬件接收到网络包,触发硬中断后,将相关网络包存放到内部队列,队列满后出发软中断通知内核接受相关的流量包,内核接收流量包后,对应的队列清空以继续接收后续的流量包,这个过程占用的cpu很少。
内核接收到软中断信号后,会调用cpu资源以接收相关的流量包,放到协议栈并进行后续的处理。如果软中断很频繁,内核就需要频繁的调用cpu响应,会很需要消耗cpu资源。特别是如果内核响应软中断的cpu绑定到固定某个cpu核时,表现更为明显
原文链接:https://blog.csdn.net/weixin_43845924/article/details/138294080
二、tcpdump 表达式
主要有 3 种类型的表达式:
- Type(类型)选项包括 host 、net和 port
- Direction(方向)选项包括 src 和 dst 以及它们的组合
- Proto(协议)包括 tcp 、udp 、ICMP 和 ah 等
tcpdump抓包原理
Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的?_tcpdump抓包位置-CSDN博客tcpdump获取的数据包实际上是在 网卡和内核之间 获取的,它通过libpcap库利用操作系统提供的网络抓包机制来实现。