#include #include #include #include #include "wlbsctrl.h" int __cdecl wmain (int argc, WCHAR ** argv) { NLBNotificationConnectionUp pfnConnectionUp = NULL; NLBNotificationConnectionDown pfnConnectionDown = NULL; NLBNotificationConnectionReset pfnConnectionReset = NULL; HINSTANCE hDLL = NULL; DWORD dwNLBStatus = 0; DWORD dwStatus = 0; struct in_addr daddr; char cluster[19]; char *temp; bool bUp = false; bool bDown = false; bool bReset = false; DWORD clus = 0; char *base = "192.1.1.1"; ULONG baseDec; ULONG baseI, baseJ, baseK; DWORD dwCount; int i; int j; int k; int counter; if (argc < 4) goto usage; if (!lstrcmpi(argv[1], L"-up")) { bUp = true; } else if (!lstrcmpi(argv[1], L"-down")) { bDown = true; } else if (!lstrcmpi(argv[1], L"-reset")) { bReset = true; } else goto usage; dwCount = _wtoi(argv[2]); if (dwCount == 0) goto usage; if (!WideCharToMultiByte(CP_ACP, 0, argv[3], -1, cluster, sizeof(cluster), NULL, NULL)) goto usage; clus = inet_addr(cluster); printf("cluster ip: %s (%08x)\n", cluster, clus); hDLL = LoadLibrary(L"wlbsctrl.dll"); if (!hDLL) { dwStatus = GetLastError(); printf("Unable to open wlbsctrl.dll... GetLastError() returned %u\n", dwStatus); return -1; } pfnConnectionUp = (NLBNotificationConnectionUp)GetProcAddress(hDLL, "WlbsConnectionUp"); pfnConnectionDown = (NLBNotificationConnectionDown)GetProcAddress(hDLL, "WlbsConnectionDown"); pfnConnectionReset = (NLBNotificationConnectionReset)GetProcAddress(hDLL, "WlbsConnectionReset"); if (!pfnConnectionUp || !pfnConnectionDown || !pfnConnectionReset) { dwStatus = GetLastError(); FreeLibrary(hDLL); printf("Unable to get procedure address... GetLastError() returned %u\n", dwStatus); return -1; } if (bUp) { baseDec = inet_addr(base); counter = 0; for( i = 0, baseI = baseDec; i < 255; ++i ) { for( j = 0, baseJ = baseI; j < 255; ++j ) { for( k = 0, baseK = baseJ; k < 254; ++k ) { if( counter == dwCount ) { goto end; } ++counter; daddr.s_addr = baseK; temp = inet_ntoa(daddr); dwStatus = (*pfnConnectionUp)(clus, htons(500), baseK, htons(500), 50, &dwNLBStatus); printf("(%s) UP -> Return value = %u, NLB extended status = %u\n", temp, dwStatus, dwNLBStatus); baseK += 0x10000; } baseJ += 0x100; } baseI += 0x1; } } if (bDown) { baseDec = inet_addr(base); counter = 0; for( i = 0, baseI = baseDec; i < 255; ++i ) { for( j = 0, baseJ = baseI; j < 255; ++j ) { for( k = 0, baseK = baseJ; k < 254; ++k ) { if( counter == dwCount ) { goto end; } ++counter; daddr.s_addr = baseK; temp = inet_ntoa(daddr); dwStatus = (*pfnConnectionUp)(clus, htons(500), baseK, htons(500), 50, &dwNLBStatus); printf("(%s) DOWN -> Return value = %u, NLB extended status = %u\n", temp, dwStatus, dwNLBStatus); baseK += 0x10000; } baseJ += 0x100; } baseI += 0x1; } } if (bReset) { baseDec = inet_addr(base); counter = 0; for( i = 0, baseI = baseDec; i < 255; ++i ) { for( j = 0, baseJ = baseI; j < 255; ++j ) { for( k = 0, baseK = baseJ; k < 254; ++k ) { if( counter == dwCount ) { goto end; } ++counter; daddr.s_addr = baseK; temp = inet_ntoa(daddr); dwStatus = (*pfnConnectionUp)(clus, htons(500), baseK, htons(500), 50, &dwNLBStatus); printf("(%s) RST -> Return value = %u, NLB extended status = %u\n", temp, dwStatus, dwNLBStatus); baseK += 0x10000; } baseJ += 0x100; } baseI += 0x1; } } return 0; end: FreeLibrary(hDLL); return 0; usage: printf("%ls [-up | -down | -reset] [count] [cluster ip]\n", argv[0]); return -1; }