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

📄 whois.cpp

📁 远程网络监视程序的源码
💻 CPP
字号:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//	Inlcude used based on how code is integrated
#include "stdafx.h"
#include "WhoIs.h"
#define DEFAULT_WHOIS_SERVER _T("whois.apnic.net")


CWhoIs::CWhoIs()
	: m_bInitSuccess(FALSE)
{
	//	Init variables
	m_iWhoIsPort = IPPORT_WHOIS;						//	defined in WINSOCK.H
	m_szWhoIsServer = DEFAULT_WHOIS_SERVER;			//	Default server

	// initialize socket and whois server array
	if( Init() )
	{
		m_bInitSuccess = TRUE;
	}
}


CWhoIs::~CWhoIs()
{
	WSACleanup();
}

BOOL CWhoIs::Init()
{
	WSADATA wsaData;
	if ( WSAStartup(MAKEWORD(2,2), &wsaData) != 0 )
	{
		return FALSE;
	}

	m_szWhoIsServerIP = GetIpFromHost(m_szWhoIsServer);	//	IP for default server
	if( m_szWhoIsServerIP.IsEmpty() )
	{
		return FALSE;
	}

	CString entryline;
	WhoIsServer server;
	CStdioFile theFile;
	if( theFile.Open("whoisservers.txt", CFile::modeRead) )
	{
		while (theFile.ReadString(entryline))
		{
			if ((entryline.GetLength() > 2)&&(entryline.Left(2) != "//"))
			{
				server.tld = entryline.Left(entryline.Find(" "));
				server.server = entryline.Right( entryline.GetLength()-entryline.Find(" ")-1 );
				m_arWhoIsServer.Add(server);
			}
		}
	}

	return TRUE;
}

void CWhoIs::LocateWhoisServer(LPCSTR szAddress)
{
	CString tld;
	//first find the TLD for the requested address

	if( m_arWhoIsServer.GetSize() == 0 )
	{
		return;			//the file "whoisservers.txt" was not found, using default whois server.
	}

	tld = CString(szAddress);
	tld = tld.Right(tld.GetLength()-tld.ReverseFind('.'));

	int i=0;

	while( (tld != ((WhoIsServer)m_arWhoIsServer.GetAt(i)).tld)&&((m_arWhoIsServer.GetSize()-1) > i) )
		i++;

	if( i >= m_arWhoIsServer.GetSize() )
	{
		TRACE( _T("no server found for this domain %s"), tld );
	}

	SetWhoIsServer( ((WhoIsServer)m_arWhoIsServer.GetAt(i)).server );
}

void CWhoIs::SetWhoIsServer(LPCSTR szServerName)
{
	//	Set new server and associated IP address
	m_szWhoIsServer = szServerName;
	m_szWhoIsServerIP = GetIpFromHost(szServerName);
}

CString CWhoIs::GetWhoIs(LPCSTR szAddress)
{
	char	szQuery[512];
	char	szBuffer[128];
	CString szResult = _T("");

	if( !m_bInitSuccess || !szAddress )
	{
		return szResult;
	}

	//	Set query string
	strcpy(szQuery, szAddress);
	strcat(szQuery, " \r\n");

	//	Create socket
	CSocket socket;
	socket.Create();

	LocateWhoisServer(szAddress);

	//	Connect to server
	int iResult = socket.Connect(m_szWhoIsServerIP, IPPORT_WHOIS);

	//	Quit on error
	if (iResult <= 0)
		return szResult;

	//	Send whois query
	iResult = socket.Send(szQuery, (int)strlen(szQuery));

	//	Quit on error
	if (iResult <= 0)
		return szResult;

	//	Get result
	szResult = "";
	while (TRUE)
	{
		//	Clear buffer before each iteration
		memset(szBuffer, 0, 128);

		//	Try to receive some data
		iResult = socket.Receive(szBuffer, 100);

		//	Quit if no more data
		if (iResult <= 0)
			break;

		//	Add this data to the result string
		szResult += szBuffer;
	}

	//	Close socket
	socket.Close();

	//	Return result
	return szResult;
}

CString CWhoIs::GetIpFromHost(LPCSTR szHostName)
{
	int i,j;
	CString szResult = "";

	//	Convert host name to IP address
 	hostent* pHost = gethostbyname(szHostName);

	for(i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++)
 	{ 
 		for(j = 0; j < pHost->h_length; j++)
 		{
			CString addr;
 
 			if(j > 0)
 				szResult += ".";
 
 			addr.Format("%u", (unsigned int)((unsigned char*)pHost->h_addr_list[i])[j]);
			szResult += addr;
 		}
 	}

	return szResult;
}

⌨️ 快捷键说明

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