如何获取本地计算机的IP,子网掩码
2008-03-06 22:02
405 查看
第一种方法,利用winsock函数来获取:
// GetIPMask.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <winsock2.h>
#include <assert.h>
#include <stdio.h>
#pragma pack( push, 1 )
#define SIO_GET_INTERFACE_LIST 0x4004747F
typedef struct _sockaddr_gen
{
sockaddr_in AddressIn;
BYTE filler[8];
} sockaddr_gen;
typedef struct _INTERFACE_INFO
{
u_long iiFlags;
sockaddr_gen iiAddress;
sockaddr_gen iiBroadcastAddress;
sockaddr_gen iiNetmask;
} INTERFACE_INFO, *PINTERFACE_INFO;
#pragma pack( pop )
int main(int argc, char* argv[])
{
WSADATA bWsaData;
WORD wVerisionRequested;
SOCKET bSocket;
int iRetValue = 0;
INTERFACE_INFO bInterfaceInfo[10];
DWORD dlByteReturn = 0;
int iNumOfInterface = 0;
wVerisionRequested = MAKEWORD( 1, 1 );
WSAStartup( wVerisionRequested, &bWsaData );
bSocket = socket( AF_INET, SOCK_STREAM, 0 );
assert( INVALID_SOCKET != bSocket );
iRetValue = WSAIoctl( bSocket,
SIO_GET_INTERFACE_LIST,
NULL,
0,
bInterfaceInfo,
1024,
&dlByteReturn,
NULL,
NULL );
assert( SOCKET_ERROR != iRetValue );
iNumOfInterface = dlByteReturn / sizeof( INTERFACE_INFO );
for( int iX = 0; iX < iNumOfInterface; iX++ )
{
sockaddr_in pIPAddress;
sockaddr_in pMaskAddress;
sockaddr_in pBroadcastAddress;
char *pIPString;
char *pMaskString;
char *pBroadcastString;
pIPAddress = bInterfaceInfo[iX].iiAddress.AddressIn;
pIPString = inet_ntoa( pIPAddress.sin_addr );
printf("/t IP Address:/t %s/n", pIPString );
pMaskAddress = bInterfaceInfo[iX].iiNetmask.AddressIn;
pMaskString = inet_ntoa( pMaskAddress.sin_addr );
printf("/t MaskAddress:/t %s/n", pMaskString );
pBroadcastAddress = bInterfaceInfo[iX].iiBroadcastAddress.AddressIn;
pBroadcastString = inet_ntoa( pBroadcastAddress.sin_addr );
printf("/t BroadcastAddress:/t %s/n/n", pBroadcastString );
}
closesocket( bSocket );
WSACleanup();
return 0;
}
第二种方式,使用GetAdaptersInfo()函数来访问:
// GetNetAddress.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <Iphlpapi.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dlRetVal = 0;
pAdapterInfo = ( IP_ADAPTER_INFO *)malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutbufLen = sizeof(IP_ADAPTER_INFO);
if ( ERROR_BUFFER_OVERFLOW == GetAdaptersInfo( pAdapterInfo, &ulOutbufLen) )
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutbufLen);
}
dlRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutbufLen );
if ( NO_ERROR == dlRetVal )
{
pAdapter = pAdapterInfo;
while ( pAdapter )
{
printf("/tAdapter Name: /t%s/n", pAdapter->AdapterName);
printf("/tAdapter Desc: /t%s/n", pAdapter->Description);
printf("/tIP Address: /t%s/n", pAdapter->IpAddressList.IpAddress.String);
printf("/tIP Mask: /t%s/n", pAdapter->IpAddressList.IpMask.String);
pAdapter = pAdapter->Next;
}
}
getchar();
return 0;
}
其中第二种方法只适合于NT系统,也就是说在Windows 98下运行会出错.
// GetIPMask.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <winsock2.h>
#include <assert.h>
#include <stdio.h>
#pragma pack( push, 1 )
#define SIO_GET_INTERFACE_LIST 0x4004747F
typedef struct _sockaddr_gen
{
sockaddr_in AddressIn;
BYTE filler[8];
} sockaddr_gen;
typedef struct _INTERFACE_INFO
{
u_long iiFlags;
sockaddr_gen iiAddress;
sockaddr_gen iiBroadcastAddress;
sockaddr_gen iiNetmask;
} INTERFACE_INFO, *PINTERFACE_INFO;
#pragma pack( pop )
int main(int argc, char* argv[])
{
WSADATA bWsaData;
WORD wVerisionRequested;
SOCKET bSocket;
int iRetValue = 0;
INTERFACE_INFO bInterfaceInfo[10];
DWORD dlByteReturn = 0;
int iNumOfInterface = 0;
wVerisionRequested = MAKEWORD( 1, 1 );
WSAStartup( wVerisionRequested, &bWsaData );
bSocket = socket( AF_INET, SOCK_STREAM, 0 );
assert( INVALID_SOCKET != bSocket );
iRetValue = WSAIoctl( bSocket,
SIO_GET_INTERFACE_LIST,
NULL,
0,
bInterfaceInfo,
1024,
&dlByteReturn,
NULL,
NULL );
assert( SOCKET_ERROR != iRetValue );
iNumOfInterface = dlByteReturn / sizeof( INTERFACE_INFO );
for( int iX = 0; iX < iNumOfInterface; iX++ )
{
sockaddr_in pIPAddress;
sockaddr_in pMaskAddress;
sockaddr_in pBroadcastAddress;
char *pIPString;
char *pMaskString;
char *pBroadcastString;
pIPAddress = bInterfaceInfo[iX].iiAddress.AddressIn;
pIPString = inet_ntoa( pIPAddress.sin_addr );
printf("/t IP Address:/t %s/n", pIPString );
pMaskAddress = bInterfaceInfo[iX].iiNetmask.AddressIn;
pMaskString = inet_ntoa( pMaskAddress.sin_addr );
printf("/t MaskAddress:/t %s/n", pMaskString );
pBroadcastAddress = bInterfaceInfo[iX].iiBroadcastAddress.AddressIn;
pBroadcastString = inet_ntoa( pBroadcastAddress.sin_addr );
printf("/t BroadcastAddress:/t %s/n/n", pBroadcastString );
}
closesocket( bSocket );
WSACleanup();
return 0;
}
第二种方式,使用GetAdaptersInfo()函数来访问:
// GetNetAddress.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <Iphlpapi.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dlRetVal = 0;
pAdapterInfo = ( IP_ADAPTER_INFO *)malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutbufLen = sizeof(IP_ADAPTER_INFO);
if ( ERROR_BUFFER_OVERFLOW == GetAdaptersInfo( pAdapterInfo, &ulOutbufLen) )
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutbufLen);
}
dlRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutbufLen );
if ( NO_ERROR == dlRetVal )
{
pAdapter = pAdapterInfo;
while ( pAdapter )
{
printf("/tAdapter Name: /t%s/n", pAdapter->AdapterName);
printf("/tAdapter Desc: /t%s/n", pAdapter->Description);
printf("/tIP Address: /t%s/n", pAdapter->IpAddressList.IpAddress.String);
printf("/tIP Mask: /t%s/n", pAdapter->IpAddressList.IpMask.String);
pAdapter = pAdapter->Next;
}
}
getchar();
return 0;
}
其中第二种方法只适合于NT系统,也就是说在Windows 98下运行会出错.
相关文章推荐
- IE下通过javascript如何获取本地网卡IP,MAC地址,计算机名
- java中如何获取远程计算机post提交的数据并把这些数据写入本地的txt文件中
- nbtstat 指令详解 及其 如何通过计算机名获取ip实战
- Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP
- C#如何获取本地计算机的状态
- VC++ 获取本地IP和计算机名
- C#获取本地计算机名IP,Mac地址
- C#获取本地计算机名IP,Mac地址
- C#编程之 如何获取本地和远程主机的IP及MAC地址
- C#下获取本地计算机的所有IP地址
- 使用Winpcap获取本地IP和子网掩码的简单程序
- C#获取本地计算机名IP,Mac地址
- 1.如何ping别人的计算机名来获取IP?
- 如何获取本地和远程主机的IP及MAC地址
- linux c 获取本地IP,MAC 子网掩码等信息
- (原创)C#获取本地计算机名,IP,MAC地址
- Android 获取本地外网IP、内网IP、计算机名等信息
- C#获取本地计算机名,IP,MAC地址,硬盘ID
- Java获取本地IP和计算机名
- python利用标准库如何获取本地IP示例详解