编写源文件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)
{