#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. C# Winform程序防止多开的方法总结(亲测)

    1.Winform启动的时候,检测是否存在同样的进程名,防止程序多开: static class Program { /// <summary> /// 应用程序的主入口点. /// &l ...

  2. 配置vtk(Win8.1 + VS2012+VTK-5.10.1)

    1.下载相关软件 vtk-5.10.1.zip和vtkdata-5.10.1.zip http://www.vtk.org/files/release/5.10/vtk-5.10.1.zip http ...

  3. Anaconda更新报404:UnavailableInvalidChannel: The channel is not accessible or is invalid.error404

    Anaconda更新一直报错,修改为国内镜像也不好使,最终找到了未被屏蔽的镜像. 错误日志: UnavailableInvalidChannel: The channel is not accessi ...

  4. VSCode中代码在浏览器中打开及实时刷新

    实时刷新方法一: 在项目目录下运行命令: browser-sync start --server --files "**/*.css,**/*.html,**/*.js" 实施刷新 ...

  5. 查看某个进程的错误日志 ps axu 结合 grep -i

    某台机器的flume报错,想要快速看到报错的内容,可以结合ps axu 和grep -i来实现. 1. ps axu |grep flume 可以看到flume的进程的启动位置. 2. 根据启动的位置 ...

  6. tensorflow查看使用的是cpu还是gpu

    https://stackoverflow.com/questions/38009682/how-to-tell-if-tensorflow-is-using-gpu-acceleration-fro ...

  7. python执行shell实时输出

    1.使用readline可以实现 import subprocess def run_shell(shell): cmd = subprocess.Popen(shell, stdin=subproc ...

  8. 使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理

    Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能. Fiddler 插件开发,使用 WPF 作为 UI 控件 - J.晒太阳的猫 - 博客园 但部分场景下,需要自定义很多网 ...

  9. MySQL学习——操作表

    MySQL学习——操作表 摘要:本文主要学习了使用DDL语句操作表的方法. 创建表 语法 create table 表名 [表定义选项] [表选项]; 表定义选项 用来创建定义表的结构,由列名(col ...

  10. docker卷管理(四)

    什么是数据卷 overlay2存储卷 docker镜像是由多个只读层叠加而成,启动容器时,docker会加载只读镜像层,并在镜像栈顶部添加一个可写层 如果运行中的容器修改了现有的一个已存在文件,那该文 ...