• 大小: 6.06MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-02
  • 语言: 其他
  • 标签: winpcap  文件传输  

资源简介

用winpcap在局域网实现文件传输 自己定义包结构

资源截图

代码片段和文件信息

#include  
#include  
#include  
#include  
#include  
#include “packet.h“

#pragma comment (lib“wpcap“)

unsigned char *source_mac=NULL; //本机MAC地址//一个pcap实例

int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
int res;
char errbuf[PCAP_ERRBUF_SIZE];
struct pcap_pkthdr *header;
const u_char *pkt_data;
    
    
    /* 获取本机设备列表 */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING NULL &alldevs errbuf) == -1)
    {
        fprintf(stderr“Error in pcap_findalldevs: %s\n“ errbuf);
        exit(1);
    }
    
    /* 打印列表 */
    for(d=alldevs; d; d=d->next)
    {
        printf(“%d. %s“ ++i d->name);
        if (d->description)
            printf(“ (%s)\n“ d->description);
        else
            printf(“ (No description available)\n“);
    }
    
    if(i==0)
    {
        printf(“\nNo interfaces found! Make sure WinPcap is installed.\n“);
        return -1;
    }
    
    printf(“Enter the interface number (1-%d):“i);
    scanf(“%d“ &inum);
     
    if(inum < 1 || inum > i)
    {
        printf(“\nInterface number out of range.\n“);
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
    /* 跳转到已选中的适配器 */
    for(d=alldevs i=0; i< inum-1 ;d=d->next i++);
    
    /* 打开设备 */
    if ( (adhandle= pcap_open(d->name          // 设备名
                              65536            // 要捕捉的数据包的部分 
                                                // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
                              0    // 模式
                              -1             // 读取超时时间
                              NULL             // 远程机器验证
                              errbuf            // 错误缓冲池
                              ) ) == NULL)
    {
        fprintf(stderr“\nUnable to open the adapter. %s is not supported by WinPcap\n“ d->name);
        /* 释放设列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
    printf(“\nlistening on %s...\n“ d->description);
    
    /* 释放设备列表 */
    pcap_freealldevs(alldevs);

//获取本机MAC
source_mac = GetSelfMac(d->name+8); //+8以去掉“rpcap://“ 
    

//获取文件数据并存储
HANDLE hfile;
int num=0;

    /* 获取数据包 */
    while((res = pcap_next_ex( adhandle &header &pkt_data)) >= 0)
{
        
        if(res == 0)
            /* 超时时间到 */
            continue;

packet pack;
memcpy(&packpkt_data22);
bool bflag=0;
for(int i=0;i<6;i++)                  //判断是否是自己发出的包
{
if(  pack.eth.source_mac[i]!=source_mac[i]  )
{
bflag=1;
break;
}
}
if(  bflag && ntohs(pack.eth.eh_type)==0xffff  ) 
{
//构造回复包
packet ackpack;
BYTE ackpackbuf[22];
memcpy(ackpack.eth.dest_macpack.eth.source_macsizeof(ackpack.eth.dest_mac));
memcpy(ackpack.eth.source_macpack.eth.dest_macsizeof(ackpack.eth.source_mac));
memcpy(&ackpack.et

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      32768  2010-07-14 00:26  文件传输\receivefile\Debug\receivefile.exe

     文件     384428  2010-07-14 00:26  文件传输\receivefile\Debug\receivefile.ilk

     文件     551936  2010-07-14 00:26  文件传输\receivefile\Debug\receivefile.pdb

     文件       7574  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\BuildLog.htm

     文件         65  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\mt.dep

     文件        663  2010-06-11 11:04  文件传输\receivefile\receivefile\Debug\receivefile.exe.embed.manifest

     文件        728  2010-06-11 11:04  文件传输\receivefile\receivefile\Debug\receivefile.exe.embed.manifest.res

     文件        621  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\receivefile.exe.intermediate.manifest

     文件      43371  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\receivefile.obj

     文件     723968  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\vc90.idb

     文件     151552  2010-07-14 00:26  文件传输\receivefile\receivefile\Debug\vc90.pdb

     文件          0  2010-07-13 21:13  文件传输\receivefile\receivefile\file.txt

     文件        692  2010-07-13 22:47  文件传输\receivefile\receivefile\packet.h

     文件       5565  2010-07-14 00:26  文件传输\receivefile\receivefile\receivefile.cpp

     文件       4095  2010-06-11 11:02  文件传输\receivefile\receivefile\receivefile.vcproj

     文件       1421  2010-07-14 00:40  文件传输\receivefile\receivefile\receivefile.vcproj.liyanbing-PC.liyanbing.user

     文件   12766208  2010-07-14 00:40  文件传输\receivefile\receivefile.ncb

     文件        899  2010-06-09 23:20  文件传输\receivefile\receivefile.sln

    ..A..H.     12800  2010-07-14 00:40  文件传输\receivefile\receivefile.suo

     文件      34304  2010-07-15 16:05  文件传输\sendfile\Debug\sendfile.exe

     文件     377692  2010-07-15 16:05  文件传输\sendfile\Debug\sendfile.ilk

     文件     535552  2010-07-15 16:05  文件传输\sendfile\Debug\sendfile.pdb

     文件       9426  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\BuildLog.htm

     文件         65  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\mt.dep

     文件        663  2010-07-15 15:02  文件传输\sendfile\sendfile\Debug\sendfile.exe.embed.manifest

     文件        728  2010-07-15 15:02  文件传输\sendfile\sendfile\Debug\sendfile.exe.embed.manifest.res

     文件        621  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\sendfile.exe.intermediate.manifest

     文件      48334  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\sendfile.obj

     文件     445440  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\vc90.idb

     文件     151552  2010-07-15 16:05  文件传输\sendfile\sendfile\Debug\vc90.pdb

............此处省略20个文件信息

评论

共有 条评论