///////////////////////////////////////////////////////////////////////// // // misc/niclist.c // by Don Becker // $Id: niclist.c,v 1.10 2004-03-20 21:26:08 cbothamy Exp $ // // This program is for win32 only. It lists the network interface cards // that you can use in the "ethdev" field of the ne2k line in your bochsrc. // // For this program and for win32 ethernet, the winpcap library is required. // Download it from http://netgroup-serv.polito.it/winpcap. // ///////////////////////////////////////////////////////////////////////// #ifndef WIN32 #error Niclist will only work on WIN32 platforms. #endif #include #include #include #include #define MAX_ADAPTERS 10 #define NIC_BUFFER_SIZE 2048 // declare our NT/9X structures to hold the adapter name and descriptions typedef struct { LPWSTR wstrName; LPSTR strDesc; } NIC_INFO_NT; typedef struct { LPSTR strName; LPSTR strDesc; } NIC_INFO_9X; // declare an array of structures to hold our adapter information NIC_INFO_NT niNT[MAX_ADAPTERS]; NIC_INFO_9X ni9X[MAX_ADAPTERS]; BOOLEAN (*PacketGetAdapterNames)(PTSTR, PULONG) = NULL; PCHAR (*PacketGetVersion)() = NULL; void myexit (int code) { printf ("\nPress any key to continue\n"); getch(); exit(code); } int main(int argc, char **argv) { int i; HINSTANCE hPacket; DWORD dwVersion, dwMajorVersion; char AdapterInfo[NIC_BUFFER_SIZE] = { '\0','\0' }; unsigned long AdapterLength = NIC_BUFFER_SIZE; LPWSTR wstrName; LPSTR strName, strDesc; int nAdapterCount; PCHAR dllVersion; PCHAR testString; int nDLLMajorVersion, nDLLMinorVersion; // Attemp to load the WinpCap packet library hPacket = LoadLibrary("PACKET.DLL"); if(hPacket) { // Now look up the address PacketGetAdapterNames = (BOOLEAN (*)(PTSTR, PULONG))GetProcAddress(hPacket, "PacketGetAdapterNames"); PacketGetVersion = (PCHAR (*)())GetProcAddress(hPacket, "PacketGetVersion"); } else { printf("Could not load WinPCap driver!\n"); printf ("You can download them for free from\n"); printf ("http://netgroup-serv.polito.it/winpcap\n"); myexit(1); } dwVersion = GetVersion(); dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); // Get DLL Version and Tokenize dllVersion = PacketGetVersion(); nDLLMajorVersion = -1; nDLLMinorVersion = -1; for ( testString = strtok(dllVersion, ", "); testString != NULL; testString = strtok(NULL, ", ") ) { // If Single Character, Convert if ( strlen( testString ) == 1 ) { // Check Major First if ( nDLLMajorVersion == -1 ) { nDLLMajorVersion = atoi(testString); } else if ( nDLLMinorVersion == -1 ) { nDLLMinorVersion = atoi(testString); } } } // Get out blob of adapter info PacketGetAdapterNames(AdapterInfo,&AdapterLength); // If this is Windows NT ... And DLL Returns UNICODE if(!(dwVersion >= 0x80000000 && dwMajorVersion >= 4) && !(nDLLMajorVersion >= 3 && nDLLMinorVersion >= 1)) { wstrName=(LPWSTR)AdapterInfo; // Obtain Names nAdapterCount = 0; while ((*wstrName)) { // store pointer to name niNT[nAdapterCount].wstrName=wstrName; wstrName += lstrlenW(wstrName) +1; nAdapterCount++; } strDesc = (LPSTR)++wstrName; // Obtain descriptions .... for(i=0;i