getnamebyadrr()得到的是域的名称,而不是机器名称.
例如:
我可以根据192.168.0.5得到名称是hsr.sve.com,但是却得不到机器的名称hsr
但是我通过ping hsr或者ping hsr.sve.com都可以得到IP.
我如何才能根据IP得到hsr呢?
请大家帮忙,小弟先谢了!
例如:
我可以根据192.168.0.5得到名称是hsr.sve.com,但是却得不到机器的名称hsr
但是我通过ping hsr或者ping hsr.sve.com都可以得到IP.
我如何才能根据IP得到hsr呢?
请大家帮忙,小弟先谢了!
#include "stdio.h"
#include "stdlib.h"
#include "Winsock2.h"
#include "iphlpapi.h" #pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "Iphlpapi.lib" ) void main( int argc, char ** argv )
{
//处理命令行参数
if ( argc != 2 )
{
printf( "RmtHost v0.1 - Get remote HostName /MacAddress\n" );
printf( "by ShotgunLabs ( [email protected] )\n\n" );
printf( "Usage :\n\tRmtHost.exe [RemoteIP]\n\n");
printf( "Example:\n\tRmtHost.exe 192.168.0.3\n\n");
exit( 0 );
} printf( "\nIpAddress : %s\n", argv[1] );
//初始化SOCKET
WSADATA wsaData;
int iRet = WSAStartup(MAKEWORD(2,1), &wsaData);
if ( iRet != 0 )
{
printf( "WSAStartup Error:%d\n", GetLastError() );
exit( 0 );
}
//获取远程机器名
hostent * remoteHostent = (hostent*)malloc( sizeof( hostent ));
int nRemoteAddr = inet_addr( argv[1] );
remoteHostent = gethostbyaddr( (char*)&nRemoteAddr,sizeof( in_addr ), AF_INET );
if ( remoteHostent )
printf( "HostName : %s\n",remoteHostent->h_name );
else
printf( "gethostbyaddr Error:%d\n", GetLastError()); //发送ARP查询包获得远程MAC地址
unsigned char macAddress[6];
ULONG macAddLen = 6;
iRet = SendARP( nRemoteAddr, NULL, (PULONG)&macAddress,&macAddLen );
if ( iRet == NO_ERROR )
{
printf( "MacAddress: " );
for( int i =0; i<6; i++ )
{
printf( "%.2x", macAddress );
if ( i<5 ) printf( "-" );
}
}
else
printf( "SendARP Error:%d\n", GetLastError() );
printf( "\n" );
}