您的位置:首页 > 其它

通过arp来得到远程机器的mac地址

2007-07-30 10:45 801 查看
通过arp来得到远程机器的mac地址

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 ( Shotgun@xici.net )/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[i] );

  if ( i<5 ) printf( "-" );

 }

}

else

 printf( "SendARP Error:%d/n", GetLastError() );

printf( "/n" );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: