//○RAWソケットで、アドレス(NIC)の列挙
//Win2000以上でしか動作しません
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <winsock2.h>
int main(){
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0) return false;
SOCKET s;
s = WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
if(s==INVALID_SOCKET) return false;
DWORD d;
char listPos[5000];
if(SOCKET_ERROR==WSAIoctl(s,SIO_ADDRESS_LIST_QUERY,NULL,0,listPos,sizeof(listPos),&d,NULL,NULL)){
return false;
}
SOCKET_ADDRESS_LIST*list=(SOCKET_ADDRESS_LIST*)listPos;
for(int i=0;i<list->iAddressCount;i++){
printf("%d : %s\n",i,inet_ntoa(((SOCKADDR_IN*)list->Address[i].lpSockaddr)->sin_addr));
}
closesocket(s);
WSACleanup();
return 0;
}
▲トップページ
>
Windows と C++