⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 网卡驱动相关实例 这是和网卡NT KMD驱动程序有关的一些资料和例子。主要是以下三方面内容: 3.1 article 一些有用的文档 3.2 Canberra 网络诊听工具Ethern
💻 C
字号:
// test.c - main, Receiver
// 
// Author: Christopher Chlap chrisc@fir.canberra.edu.au 28. November, 1997
//

//#define UNICODE 1

#include <windows.h>
#include <stdio.h>

#include "test.h"

//------------------------------------------------------------------------
//
//  Prototypes
//
//------------------------------------------------------------------------
int Receiver();

//------------------------------------------------------------------------
//
//  Globals
//
//------------------------------------------------------------------------

ULONG       Filters[6] = {0, NDIS_PACKET_TYPE_DIRECTED,
                          NDIS_PACKET_TYPE_MULTICAST,
                          NDIS_PACKET_TYPE_BROADCAST,
                          NDIS_PACKET_TYPE_ALL_MULTICAST,
                          NDIS_PACKET_TYPE_PROMISCUOUS};

TCHAR       szbuff[40];
LPADAPTER   lpAdapter;
LPPACKET    lpPacket;
ULONG       Filter = 0;

//------------------------------------------------------------------------
//
//  packet -- basic NT packet driver test
//
//  TESTS:  PacketGetAdapterNames, PacketopenAdapter, PacketSetFilter, 
//          PacketGetAddress, PacketAllocatePacket, PacketInitPacket,
//          PacketReceive, PacketFreePacket, PacketCloseAdapter
//
//------------------------------------------------------------------------

main(int nargs, char **args)
{
    TCHAR   buf[256];
    TCHAR   *Name;
    ULONG   NameLength = 256;
    UCHAR   Address[6];
    UINT    i, n;
    DWORD   tid;
    HANDLE  hThread;

    if (nargs != 2) {
        printf("Usage: test [Adapter 0..3]\n");
        return 0;
    }

    if (atoi(args[1]) > 3) {
        printf("Usage: test [Adapter 0..3]\n");
        return 0;
    }
            
    printf("\nNT Packet Monitor\n\n");

    Name = buf;
        
    PacketGetAdapterNames(Name, &NameLength);

    switch (atoi(args[1])) {
        case 3: Name = &Name[strlen(Name)+1];
                if (!strlen(Name))
                    break;
        case 2: Name = (char *) &Name[strlen(Name)+1];
                if (!strlen(Name))
                    break;
        case 1: Name = (char *) &Name[strlen(Name)+1];
                if (!strlen(Name))
                    break;
        case 0: break;
    }
    
    if (strlen(Name) != 0) {
        printf("Adapter Name: %s\n", Name);
        }
    else {
        printf("Adapter %s not present\n", args[1]);
        return 0;
    }
    
    lpAdapter = PacketOpenAdapter(Name);

    Filter = Filters[5];
    PacketSetFilter(lpAdapter, Filter);

    PacketGetAddress(lpAdapter, Address);

    printf("Adapter Addr: [");

    for (i=0; i<5; i++)
        printf("%02x:", Address[i]);
    printf("%02x]\n\n", Address[i]);    

    hThread = CreateThread(0, 
                           0,
                           (LPTHREAD_START_ROUTINE) Receiver,
                           0,
                           0,
                           &tid);
                            
    printf("Hit RETURN to terminate...\n\n");
    getchar();

    TerminateThread(hThread, 0);

    PacketCloseAdapter(lpAdapter);
    return 0;    
}

//------------------------------------------------------------------------
//
//  receiver -- a trivial packet monitor (promiscuous)
//
//------------------------------------------------------------------------

int Receiver()
{
    int    i;
    UCHAR  buf[1514];
    ULONG  Length;
    int    count = 0;
            
    while (TRUE) {

        lpPacket = PacketAllocatePacket();

        PacketInitPacket(lpPacket, buf, 1514);

        PacketReceivePacket(lpAdapter, lpPacket, TRUE, &Length);

        printf("Packet [%d]\n", count++);

        for (i=0; i<Length; i++) {
            printf("%02x ", buf[i]);
            if (!((i+1) % 16))
                printf("\n");
        }        
        printf("\n\n"); 
        PacketFreePacket(lpPacket);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -