使用raw socket编程抓取goose报文

本文档详细介绍了如何在C语言中使用socket编程实现对带有特定类型(如0x88b8)的Goose协议数据包的接收,包括使用PF_PACKET和SOCK_RAW创建套接字,以及处理接收到的数据包并进行基本验证。

编写源文件goose.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netinet/ip_icmp.h>
#include<netinet/tcp.h>
#include<netinet/udp.h>
#include<net/if.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/ioctl.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <time.h>

#define BUFFSIZE 8024

struct goose_pkt{
	uint8_t dest[6];
	uint8_t src[6];
	uint16_t type;
	//uint32_t vlan;
	uint16_t app_id;
	uint16_t length;
	uint8_t reserve[6 * 16 + 2];
	uint16_t sq_num;
}__attribute__((packed));


struct session {
	time_t time;
	uint16_t seq_num;
	uint32_t cnt;
	uint32_t time_diff;
};

#define MAX_APP_ID 0x1200
struct session map[MAX_APP_ID];

/*
 * return:
 * 0 success
 * 1 timeout
 * -1 fail
 */
int get_goose_massage(int sockfd, uint8_t *buff, uint32_t *length)
{
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值