![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NetWork
_Programmer_
这个作者很懒,什么都没留下…
展开
-
简易版WireShark实现-界面设计
下面是官方WireShark抓包软件的截图。上面的矩形框主要是显示每一包的简略信息,包括数据包的序列数,数据包中的源IP地址和目的IP地址,协议类型和相关信息等等。 下面的矩形框主要是显示每一包的各层的报头信息(这里我主要针对IP协议),包括以下链路帧的信息:源MAC地址,目的MAC地址,包类型 IP报头数据:源IP地址,目的IP地址,总长度,片偏移,生存时间,协议类型等等 具体IP层协议的一些信息原创 2017-06-18 19:01:58 · 2288 阅读 · 7 评论 -
简易版WireShark实现-相关网络知识(3)
IP报头中的协议类型在定位IP报头后,就可以根据其中的协议类型protocol来区分是IP层下的哪一种协议,主要协议类型即对应值如下: 协议类型 值 ICMP 1 IGMP 2 TCP 6 UDP 17定位TCP报头TCP的数据结构如下图所示:在【netinet/tcp.h】中的定义如下: /* * TCP header. * Per RFC 793, Sep原创 2017-06-19 10:35:29 · 1005 阅读 · 0 评论 -
简易版WireShark实现-效果
与官方WireShark捕获的同一包数据进行对比 源IP地址、目的IP地址,源MAC地址和目的MAC地址,协议类型都相同 以太网帧长度,帧头类型以及帧头类型值相同 IP报文部分:总长度、标识,片偏移、IP协议类型、源IP地址、目的IP地址、头部校验和均相同 最终效果: 源码地址:简易版WireShark的实现 ...原创 2017-06-19 15:39:01 · 3246 阅读 · 5 评论 -
简易版WireShark实现-相关网络知识(1)
在Linux下数据链路层的访问通常都是通过编写内核驱动程序来实现的,在应用层使用SOCK_PACKET类型的协议族可以实现部分功能。 SOCK_PACKET类型 建立套接字的时候选择SOCK_PACKET类型,内核将不对网络数据进行处理而直接交给用户,数据直接从网卡的协议栈交给用户。建立一个SOCK_PACKET类型的套接字使用如下方式:int sock = socket(AF_INET,原创 2017-06-18 22:26:31 · 1490 阅读 · 0 评论 -
简易版WireShark实现-相关网络知识(2)
定位IP报头获得以太网帧后,当协议类型为0x0800时,其负载部分协议为IP协议,及以太网帧中的数据部分,从第46字节开始的前20个字节,就是IP报头。数据结构如下: IP头部的数据结构定义在头文件【netinet/ip.h】中,如下: struct iphdr { #if __BYTE_ORDER == __LITTLE_ENDIAN /*小端*/ unsigned原创 2017-06-19 09:04:15 · 854 阅读 · 0 评论