📄 test.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 + -