Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "network.h"
#include "diagnostics.h"
#include "util.h"
BOOL CDiagnostics::IsInvalidIPAddress( IN LPCSTR pszHostName ) /*++
Routine Description Checks to see if an IP Host is a in valid IP address 0.0.0.0 is not valid 255.255.255.255 is not valid "" is not valid
Arguments pszHostName Host Address
Return Value TRUE Is invalid IP address FALSE Valid IP address
--*/ { BYTE bIP[4]; int iRetVal; LONG lAddr;
if( NULL == pszHostName || strcmp(pszHostName,"") == 0 || strcmp(pszHostName,"255.255.255.255") ==0) { // Invalid IP Host
//
return TRUE; }
lAddr = inet_addr(pszHostName);
if( INADDR_NONE != lAddr ) { // Formatted like an IP address X.X.X.X
//
if( lAddr == 0 ) { // Invalid IP address 0.0.0.0
//
return TRUE; } } return FALSE; }
BOOL CDiagnostics::IsInvalidIPAddress( IN LPCWSTR pszHostName ) { CHAR szIPAddress[MAX_PATH+1]; szIPAddress[MAX_PATH] = L'\0';
if( lstrlen(pszHostName) > 255 ) { // A host name can only be 255 chars long
return TRUE; }
wcstombs(szIPAddress,pszHostName,MAX_PATH);
return IsInvalidIPAddress(szIPAddress); }
BOOL CDiagnostics::Connect( IN LPCTSTR pszwHostName, IN DWORD dwPort ) /*++
Routine Description Establish a TCP connect
Arguments pszwHostName Host to ping dwPort Port to connect to
Return Value TRUE Successfully connected FALSE Failed to establish connection
--*/
{ SOCKET s; SOCKADDR_IN sAddr; CHAR szAscii[MAX_PATH + 1]; hostent * pHostent;
// Create the socket
//
s = socket(AF_INET, SOCK_STREAM, PF_UNSPEC); if (INVALID_SOCKET == s) { return FALSE; }
// Bind this socket to the server's socket address
//
memset(&sAddr, 0, sizeof (sAddr)); sAddr.sin_family = AF_INET; sAddr.sin_port = htons((u_short)dwPort); wcstombs(szAscii,(WCHAR *)pszwHostName,MAX_PATH); pHostent = gethostbyname(szAscii); if( !pHostent ) { return FALSE; }
// Set the destination info
//
ULONG ulAddr;
memcpy(&ulAddr,pHostent->h_addr,pHostent->h_length); sAddr.sin_addr.s_addr = ulAddr;
// Attempt to connect
//
if (connect(s, (SOCKADDR*)&sAddr, sizeof(SOCKADDR_IN)) == 0) { // Connection succeded
//
closesocket(s); return TRUE; } else { // Connection failed
//
closesocket(s); return FALSE; } }
|