|
本帖最后由 diddom 于 2012-5-14 00:26 编辑
- // GetPublicIP.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <winsock2.h> //這個必須在<windows.h>前面
- #include <windows.h>
- //#include <winsock2.h>
- #include <ws2tcpip.h>
- #pragma comment(lib,"ws2_32.lib")
- unsigned long dwProtocol=IPPROTO_IP;
- unsigned long dwInterface=0;
- //unsigned long dwIoControlCode=SIO_RCVALL;
- #define HI_WORD(byte) (((byte) >> 4) & 0x0F)
- #define LO_WORD(byte) ((byte) & 0x0F)
- int EnumNetworkInterfaces()
- {
- SOCKET hSocket;
- SOCKET_ADDRESS_LIST *pstlist=NULL;
- int i;
- char szBuf[4096];
- unsigned long dwBytesRet;
-
- hSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
- if(hSocket==SOCKET_ERROR)
- {
- printf("socket() failed!error code:%d\n",WSAGetLastError());
- return 0;
- }
- if(WSAIoctl(hSocket,SIO_ADDRESS_LIST_QUERY,NULL,0,szBuf,4096,&dwBytesRet,NULL,NULL)==SOCKET_ERROR)
- {
- printf("WSAIoctl(SIO_ADDRESS_LIST_QUERY) failed!Error code:%d\n",WSAGetLastError());
- return 0;
- }
-
- pstlist=(SOCKET_ADDRESS_LIST *)szBuf;
-
- for(i=0; i<pstlist->iAddressCount; i++)
- {
- printf(" %d %s\n",i,inet_ntoa(((SOCKADDR_IN *)pstlist->Address[i].lpSockaddr)->sin_addr));;
- }
-
- printf("%d\n",hSocket);
- system("pause");
- closesocket(hSocket);
- return 0;
- }
- int main(int argc, char* argv[])
- {
- WSADATA wsaData;
- WSAStartup(0x0202, &wsaData);
- EnumNetworkInterfaces();
- WSACleanup();
- return 0;
- }
复制代码 |
|