#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. luogu5823 课表的排列

    题目链接 problem 构造一个长度为\(2n\)的数列.满足: 1.[1,n]中每个数字恰好出现两次. 2.将所有相同数字之间相隔的数字个数排序后,得到公差为1的等差数列. 保证n为奇数. sol ...

  2. 去掉Oracle数据库中字段值前后空格

    发现oracle字段钟包含了空格,可能是前空格,也可能是后空格,因为是历史数据,需要特殊处理.但是中间的空格可能是一些特殊人员的姓名含有,这种情况不能处理.所以我们只需要处理前后空格即可.使用如下sq ...

  3. CF1263F Economic Difficulties(DP)

    拿小号打了这场,然而做到这里时少看了条件,最后 10min 才发现,没有 AK,身败名裂-- 赛后看就是 sb 题-- (好像这题也不值 2500 吧?) 首先注意到一条很重要的条件:对于每棵树,都存 ...

  4. IT兄弟连 HTML5教程 HTML文档主体标记body

    在HTML的<body>和</body>标记中定义文档的主体,包含文档的所有内容(比如文本.超链接.图像.表格和列表等等).<body>标签有自己的属性,设置< ...

  5. IT兄弟连 Java语法教程 数据类型1

    Java是强类型化的语言 Java是一种强类型话的语言,在开始时指出这一点是很重要的.实际上,Java的安全性和健壮性正是部分来自这一事实.强类型意味着什么呢?首先,每个变量都具有一种类型,每个表达式 ...

  6. docker 集群管理gui

    k8s: https://www.rancher.cn/ swarm: https://github.com/dockersamples/docker-swarm-visualizer https:/ ...

  7. SpringBoot2使用Jetty容器(替换默认Tomcat)

    https://blog.csdn.net/hanchao5272/article/details/99649252   Jetty和tomcat的比较 Tomcat和Jetty都是一种Servlet ...

  8. 总结了11条,我对Python 装饰器的理解

    对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽 ...

  9. 如何让Python爬虫一天抓取100万张网页

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...

  10. centos 7 搭建vsftp

    一.FTP简介 1.ftp 概述                                                FTP:(file  transfer  protocol文件传输协议) ...