hex2pcap
#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的更多相关文章
- AireOS WLC配置抓包
这个Note主要列举在AireOS WLC上如何抓包.它实现的步骤也相对比较简单: 1.开启debug packet, 2.有数据被抓取到时,会以16进制的形式在WLC上输出, 3.我们将输出信息保存 ...
随机推荐
- 一站式解决Mac--socket.gaierror: [Errno 8] nodename nor servname provided, or not known
socket.gaierror: [Errno 8] nodename nor servname provided, or not known 原因:hostname 没有写在/etc/hosts里 ...
- React: React组件创建的三种方式
一.简介 在前面介绍的React组件知识中,对于组件的创建我只是用了其中某一种方式.其实,在2013年React诞生之初,对于React组件的创建,仅仅只有一种方式,也即createClass函数,在 ...
- js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
在JavaScript的数字类型Number中,我们最常使用的大概是整数类型与浮点数类型,但除这两者外,还有个特殊的存在NaN,为什么NaN!==NaN?我们如何判断一个值是否等于NaN呢?这篇文章好 ...
- kvm与xen虚拟化的比较(转)
Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM. 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商 ...
- Kettle在windows上安装
Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,数据抽取高效稳定. 因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以 ...
- 【深度学习】K-L 散度,JS散度,Wasserstein距离
度量两个分布之间的差异 (一)K-L 散度 K-L 散度在信息系统中称为相对熵,可以用来量化两种概率分布 P 和 Q 之间的差异,它是非对称性的度量.在概率学和统计学上,我们经常会使用一种更简单的.近 ...
- 从新手小白到老手大白的成长之路第二弹-WPF之UI界面之Grid面板
废话不多说,接下来直接开始介绍WPF-UI界面-Grid面板 如图就是创建好了的一个WPF项目,整个界面被一个Window窗体包含起来,上面类似于什么什么网址什么的其实就相当于.net的命名空间,缺什 ...
- go-goroutine 和 channel
goroutine 和 channel goroutine-看一个需求 需求:要求统计 1-9000000000 的数字中,哪些是素数? 分析思路: 1) 传统的方法,就是使用一个循环,循环的判断各个 ...
- 帝国CMS QQ登陆接口插件 适用于所有帝国7.2版本
插件名称:帝国CMS-QQ登录插件 插件作者:帝国CMS官方 插件介绍:帝国CMS系统的QQ登录插件. 官方网站:http://www.phome.net ---------------------- ...
- Java三大性质总结:原子性、可见性以及有序性
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...