利用C语言编写一个网络分析器

一、链路层数据格式

mac报文:14个字节
在这里插入图片描述
在这里插入图片描述

二、IP数据报文格式

在这里插入图片描述

三、TCP数据报文格式

在这里插入图片描述

四、UDP数据报文格式

在这里插入图片描述

五、demo(网络分析器)

recvfrom接收链路层帧数据,不经过网络层、传输层,不会给发送者的地址结构赋值,因此后两个参数为NULL。

设计思路:

①创建一个原始套接字。
②while(1)利用recvfrom不断接收网络数据。
③解析获得mac头部中的源mac和目的mac,并判断网络层的协议类型。
④若是IP报文,则获得源IP和目的IP,并解析获得传输层协议类型。
⑤若传输层为TCP或UDP协议,则解析报文获得数据

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ether.h>
#include <arpa/inet.h>
#include <errno.h>

int main()
{
   
	//1.创建一个原始套接字(ETH_P_ALL表示收发任何数据类型)
	int sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
	if(sockfd<0){
   
		perror("socket");
		return 0;
	}
	else{
   
		printf("sockfd=%d\n",sockfd);
	}
	
	//2.使用recvfrom接收网络数据(数据多,需要用while)
	while(1)
	{
   
		//定义buf存放帧数据,大小unsigned char1500
		unsigned char buf[1500]="";
		int len = recvfrom(sockfd, buf, sizeof(buf), 0, NULL, 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值