数据包解码
老是老下大家的东西, 老觉的不好意思 ,自己也为大家做个贡献在代码中简可以将数据报保存在文件中(路径可以修改 也可以使用宏的形势), 之后可以使用 解包工具(比如 wireshake ) 打开 .
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include "DecodePacket.h"
#define TURE 1
main()
{
pcap_t *handle;
pcap_t *adhandle;
char *dev;
pcap_dumper_t* dumpfile;
struct pcap_pkthdr* header;
bpf_u_int32 mask; /* Our netmask */
bpf_u_int32 net;
char errbuf[PCAP_ERRBUF_SIZE];
// 鎵撳紑缃戝崱锛屽苟涓旇缃负娣锋潅妯″紡
dev = pcap_lookupdev(errbuf);
/* Find the properties for the device */
pcap_lookupnet(dev, &net, &mask, errbuf);
/* Open the session in promiscuous mode */
adhandle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf);
//adhandle=pcap_open_live(handle,65535,1,1000,errbuf)锛?
// 寤虹珛瀛樺偍鎴幏鏁版嵁鍖呯殑鏂囦欢
int re;
int pcap_ret = 0;
//pcap_pkthdr* header; // Header
u_char* pkt_data; // 鏁版嵁鍖呭唴瀹规寚閽? dumpfile=pcap_dump_open(adhandle, "/tmp/savefile");
// 浠庣綉鍗℃垨鑰呮枃浠朵腑涓嶅仠璇诲彇鏁版嵁鍖呬俊鎭?#if 0
while((re=pcap_next_ex(adhandle,&header,(const u_char**)&pkt_data))>=0)
{
// 灏嗘崟鑾风殑鏁版嵁鍖呭瓨鍏ユ枃浠?
pcap_dump((unsigned char*)dumpfile,header,pkt_data);
decodethepacket(pkt_data);
printf("the pack = %0xd" ,pkt_data);
}
#endif
while (TURE)
{
pcap_ret = pcap_loop(adhandle, -1 , (pcap_handler) ProcessPacket, NULL);
if (pcap_ret < 0)
{
printf("havent getten the packet\n");//闇 谢谢楼主了 谢谢! 3KS 好,谢谢 thank you! 3ks~~~ 3ks~~~ 谢谢楼主 没全啊 !怎么是半个程序呢?
谢谢楼主
谢谢楼主 没看明白,注释还是乱码阿 ......不完全哎 注释有很严重的问题啊 ~~ 重新发一份吧 还是程序的具体用途也解释下啊~~怎么没有下载的啊
:-) 赞一个 怎么注释的部分是那个样子的呢 怎么我看的不全啊??页:
[1]