如何实现接收包并存入本地文本文件 客户端程序可把客户端机器信息发包到服务器端服务器端怎样把包写入文本文件呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString strRecv="接收到的数据...";FILE* pf=fopen("c:\recv.txt","w+");fprintf(pf,"%s",strRecv);fclose(pf); mfc提供了类啊,你自己看看就知道了。结合arche. 你要的是数据包的二进制文件吗看看下面代码是不是你要的(先安装winpcap)#include "WinSock2.h"#include "stdio.h"#include "windows.h"#include "pcap.h"#define IO_RCVALL _WSAIOW(IOC_VENDOR,1) void main(){ int i = 0; SOCKET SnifferSocket; WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); //开启winsock.dll SnifferSocket=WSASocket(AF_INET, SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//创建raw socket char FAR name[128]; //获取本机IP地址 gethostname(name, sizeof(name)); struct hostent FAR * pHostent; pHostent = gethostbyname(name); SOCKADDR_IN sa; //填充SOCKADDR_IN结构的内容 sa.sin_family = AF_INET; sa.sin_port = htons(10003); // 端口号可以随便改,当然与当然系统不能冲突 memcpy(&(sa.sin_addr),pHostent->h_addr,pHostent->h_length); bind(SnifferSocket,(LPSOCKADDR)&sa,sizeof(sa)); //绑定 //方法二,winpcap捕获数据包 pcap_if_t* alldevs; pcap_if_t* d; char errbuf[PCAP_ERRBUF_SIZE]; memset(errbuf, 0, PCAP_ERRBUF_SIZE); pcap_findalldevs(&alldevs,errbuf); // 获得网络设备指针 for(d=alldevs;d;d=d->next) // 枚举网卡然后添加到ComboBox中 { d->name; // d->name就是我们需要的网卡名字字符串,按照你// 自己的需要保存到你的相应变量中去 } pcap_t* adhandle; memset(errbuf, 0, PCAP_ERRBUF_SIZE); // 打开网卡,并且设置为混杂模式 // pCardName是前面传来的网卡名字参数 adhandle = pcap_open_live(alldevs->name, 65535, 1, 1000, errbuf); pcap_freealldevs(alldevs); /* 功能: 建立或者打开存储数据包内容的文件,并返回其句柄 参数: pcap_t * p:前面打开的网卡句柄;const char * fname :要保存的文件名字 返回值:pcap_dumper_t* : 保存文件的描述句柄,具体细节我们不用关心 */ pcap_dumper_t* dFile = pcap_dump_open (adhandle, "c:\\Packet.dat"); /* 功能:从网卡或者数据包文件中读取数据内容 参数:pcap_t * p: 网卡句柄 struct pcap_pkthdr ** pkt_header: 并非是数据包的指针,只是与数据包捕获驱动有关的一个Header u_char ** pkt_data:指向数据包内容的指针 ,包括了协议头 返回值:1:如果成功读取数据包 0:pcap_open_live()设定的超时时间之内没有读取到内容 -1: 出现错误 -2: 读文件时读到了末尾*/ u_char *pkt_data; struct pcap_pkthdr * pkt_header; while((i = pcap_next_ex(adhandle, &pkt_header, (const u_char**)&pkt_data)) >= 0){ //将捕获的数据包存入文件 pcap_dump((unsigned char*)dFile, pkt_header,pkt_data); }} MFC的类CFile,或者i/0操作api都可以将你接收到数据包写倒本地! MSDN怎么用 请问如何从 WCHAR 转换到 LPCTSTR ? 如何在listctrl中设置某项被默认选中? 怎么实现给每台登陆域的机器创建一个共享路径 请讲解一下precompiled header 请问热键和加速键,快捷键有什么区别? overwind_slash(残翅迎风) 进来领分,再次非常感谢。 疑问 如何在初始何时,默认选中一个工具栏上的CheckButton 能不能动态的更改基于对话框(MFC)的背景呢? 为什么DrawIconEx画出来的icon边上不干净? 如何把一个目录下的所有文件拷贝到另外一个目录?
FILE* pf=fopen("c:\recv.txt","w+");
fprintf(pf,"%s",strRecv);
fclose(pf);
#include "stdio.h"
#include "windows.h"
#include "pcap.h"#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)
void main()
{
int i = 0;
SOCKET SnifferSocket;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData); //开启winsock.dll
SnifferSocket=WSASocket(AF_INET, SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//创建raw socket
char FAR name[128]; //获取本机IP地址
gethostname(name, sizeof(name));
struct hostent FAR * pHostent;
pHostent = gethostbyname(name);
SOCKADDR_IN sa; //填充SOCKADDR_IN结构的内容
sa.sin_family = AF_INET;
sa.sin_port = htons(10003); // 端口号可以随便改,当然与当然系统不能冲突
memcpy(&(sa.sin_addr),pHostent->h_addr,pHostent->h_length);
bind(SnifferSocket,(LPSOCKADDR)&sa,sizeof(sa)); //绑定
//方法二,winpcap捕获数据包
pcap_if_t* alldevs;
pcap_if_t* d;
char errbuf[PCAP_ERRBUF_SIZE];
memset(errbuf, 0, PCAP_ERRBUF_SIZE);
pcap_findalldevs(&alldevs,errbuf); // 获得网络设备指针
for(d=alldevs;d;d=d->next) // 枚举网卡然后添加到ComboBox中
{
d->name; // d->name就是我们需要的网卡名字字符串,按照你// 自己的需要保存到你的相应变量中去
}
pcap_t* adhandle;
memset(errbuf, 0, PCAP_ERRBUF_SIZE);
// 打开网卡,并且设置为混杂模式
// pCardName是前面传来的网卡名字参数
adhandle = pcap_open_live(alldevs->name, 65535, 1, 1000, errbuf);
pcap_freealldevs(alldevs);
/*
功能: 建立或者打开存储数据包内容的文件,并返回其句柄
参数: pcap_t * p:前面打开的网卡句柄;const char * fname :要保存的文件名字
返回值:pcap_dumper_t* : 保存文件的描述句柄,具体细节我们不用关心
*/
pcap_dumper_t* dFile = pcap_dump_open (adhandle, "c:\\Packet.dat"); /*
功能:从网卡或者数据包文件中读取数据内容
参数:pcap_t * p: 网卡句柄 struct pcap_pkthdr ** pkt_header: 并非是数据包的指针,只是与数据包捕获驱动有关的一个Header
u_char ** pkt_data:指向数据包内容的指针 ,包括了协议头
返回值:1:如果成功读取数据包 0:pcap_open_live()设定的超时时间之内没有读取到内容
-1: 出现错误 -2: 读文件时读到了末尾
*/ u_char *pkt_data;
struct pcap_pkthdr * pkt_header;
while((i = pcap_next_ex(adhandle, &pkt_header, (const u_char**)&pkt_data)) >= 0){
//将捕获的数据包存入文件
pcap_dump((unsigned char*)dFile, pkt_header,pkt_data);
}
}