#include <stdlib.h>
#include <stdio.h>
#include <string.h> typedef struct
{
unsigned int magic_number;
unsigned short version_major;
unsigned short version_minor;
unsigned int thiszone;
unsigned int sigfigs;
unsigned int snaplen;
unsigned int network;
}pcap_hdr_t; typedef struct
{
unsigned int ts_sec;
unsigned int ts_usec;
unsigned int incl_len;
unsigned int orig_len;
}pkt_hdr_t; FILE *pcap_fd = NULL;
unsigned char input_buf[] = {};
unsigned char output_buf[] ={};
int input_len = , output_len = ; int hexdump(unsigned char *name, unsigned char *data, unsigned short len)
{
int i, j, p, ret, tmp_len = ;
static unsigned char dump_buf[] = {};
printf("hexdump(%s len=%d)\r\n", name, len);
memset(dump_buf, 0x00, sizeof(dump_buf)); for (i = , j = , p = ; i < len; i++)
{
ret = sprintf( (dump_buf + p), " %02x", *(data + i) );
p += ret;
j++;
if(j >= )
{
printf("%s\r\n", dump_buf);
j = ;
p = ;
}
}
if(p > )
printf("%s\r\n", dump_buf);
return ;
} int file_size(FILE *fd)
{
int cur, len;
cur = ftell(fd);
fseek(fd, , SEEK_END);
len = ftell(fd);
fseek(fd,cur, SEEK_SET);
return len;
} int wpkt(unsigned char *buf, int size)
{
int ret;
ret = fwrite(buf, size, , pcap_fd);
if(ret != )
printf("fwrite %d %d err \n", size, ret);
return ;
} int pcap_deinit(void)
{
fclose(pcap_fd);
return ;
} int eth_pcap(unsigned char *pkt, int len)
{
pkt_hdr_t pkt_hdr = {}; pkt_hdr.incl_len = pkt_hdr.orig_len = len;
wpkt((unsigned char *)(&pkt_hdr), sizeof(pkt_hdr));
wpkt(pkt, len);
return ;
} int pcap_init(int pkt_type, unsigned char *file)
{
pcap_hdr_t pcap = {}; pcap_fd = fopen(file, "wb+");
if(NULL == pcap_fd)
{
printf("create %s err\n", file);
return -;
}
printf("create %s file\r\n", file);
pcap.magic_number = 0xa1b2c3d4;
pcap.snaplen = 0x900;
pcap.version_major = ;
pcap.version_minor = ;
pcap.network = pkt_type;//105,1
wpkt((unsigned char *)(&pcap), sizeof(pcap));
return ;
} int main(int argc, char *argv[])
{
FILE *fd;
unsigned char ch, *token, *delim = " ,";
int i, ret,pkt_type; argc--;
argv++;
/*hex2pkt -mac -i frame.hex -o mac.pcap*/
do
{
if( == strcmp(argv[], "-eth"))
{
pkt_type = ;
}
else if( == strcmp(argv[], "-mac"))
{
pkt_type = ;
}
else if( == strcmp(argv[], "-i"))
{
argv++;
argc--;
fd = fopen(argv[], "rb");
printf("-i %s\r\n", argv[]);
input_len = file_size(fd);
ret = fread( input_buf, input_len, , fd );
if( != ret)
printf("fread err ret %d\r\n", ret);
printf("input_buf(len=%d):\r\n%s\r\n", input_len, input_buf);
fclose(fd);
}
else if( == strcmp(argv[], "-o"))
{
argv++;
argc--;
for( token = strtok(input_buf, delim), output_len=; token != NULL; token = strtok(NULL, delim) )
{
sscanf(token, "%x", &output_buf[output_len++]);
}
hexdump("output", output_buf, output_len);
pcap_init(pkt_type, argv[]);
eth_pcap(output_buf, output_len);
pcap_deinit();
}
else
{
printf("unknow cmd %s\r\n", argv[]);
}
argv++;
argc--;
}
while(argc); return ;
}

hex2pcap的更多相关文章

  1. AireOS WLC配置抓包

    这个Note主要列举在AireOS WLC上如何抓包.它实现的步骤也相对比较简单: 1.开启debug packet, 2.有数据被抓取到时,会以16进制的形式在WLC上输出, 3.我们将输出信息保存 ...

随机推荐

  1. Luogu P5298 [PKUWC2018]Minimax

    好劲的题目啊,根本没往线段树合并方面去想啊 首先每种权值都有可能出现,因此我们先排个序然后一个一个求概率 由于此时数的值域变成\([1,m]\)(离散以后),我们可以设一个DP:\(f_{x,i}\) ...

  2. subprocess模块(了解)

    目录 一.subprocess模块 一.subprocess模块 subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入.标准输出.标准错误以及返回码等.更 ...

  3. 初学者用js做的计算题

    1.苹果3元一个,鸭梨2元一个,桃子1元一个.现在想用200元买100个水果,在控制台中打印出来. var apple = 0; //苹果 var pear = 0; //梨 var peach = ...

  4. settings.py相关配置

    INSTALLED_APPS   #配置项目绑定的应用 TEMPLATES   #配置项目使用的模板引擎 DATABASES   #设定绑定的数据库 TIME_ZONE   #设定时区,时区的设定可能 ...

  5. 2019 年 GitHub 上最热门的 Java 开源项目

    1.JavaGuide https://github.com/Snailclimb/JavaGuide Star 22668 [Java 学习 + 面试指南] 一份涵盖大部分 Java 程序员所需要掌 ...

  6. 搭建Jupyter学习环境

    `python notebook`是一个基于浏览器的python数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果.jupyter是它的升级版,它的安装也非常方便,一般`Anacon ...

  7. Python爬取酷狗飙升榜前十首(100)首,写入CSV文件

    酷狗飙升榜,写入CSV文件 爬取酷狗音乐飙升榜的前十首歌名.歌手.时间,是一个很好的爬取网页内容的例子,对爬虫不熟悉的读者可以根据这个例子熟悉爬虫是如何爬取网页内容的. 需要用到的库:requests ...

  8. oracle学习笔记(十七) PL/SQL高级应用

    PL/SQL高级应用 动态SQL 在PL/SQL中,不能直接执行DDL(create,alter,drop),得使用动态SQL,当然,除了DDL,动态SQL也可以执行DML(select,insert ...

  9. Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...

  10. vue 地图可视化 maptalks 篇

    Maptalks 项目是一个 HTML5 的地图引擎, 基于原生 ES6 Javascript 开发: - 二三维一体化地图, 通过二维地图的旋转 /倾斜增加三维视角 - 插件化设计, 能与其他图形库 ...