#include <winsock2.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
#include <Ws2tcpip.h>
#include <stdio.h>
#include <windows.h>
#include <Mswsock.h>
int main()
{
int wsError = 0;
DWORD bytesReturned = 0;
char* pAddrString;
SOCKADDR_IN* pAddrInet;
u_long SetFlags = 0;
struct sockaddr_in sock_sniff;
WSADATA wsd;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup() failed: %d/n", GetLastError());
return -1;
}
USHORT nPort = 4567; // 此服务器监听的端口号
// 创建监听套节字
SOCKET s;
if((s = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
{
fprintf (stderr, "Socket creation failed/n");
WSACleanup();
return false;
}
sock_sniff.sin_family = AF_INET;
sock_sniff.sin_port = htons(4444);
sock_sniff.sin_addr.s_addr = INADDR_ANY;
if ( bind( s, (struct sockaddr *)&sock_sniff, sizeof(sock_sniff) ) == SOCKET_ERROR )
{
printf( "Error: bind = %ld/n", WSAGetLastError() );
closesocket(s);
exit(-2);
}
SOCKET_ADDRESS_LIST *slist=NULL;
char buf[2048];
DWORD dwBytesRet;
int ret;
fprintf(stderr, "Scanning Interfaces . . ./n/n");
ret = WSAIoctl(s, SIO_ADDRESS_LIST_QUERY, NULL, 0, buf, 2048,&dwBytesRet, NULL, NULL);
slist = (SOCKET_ADDRESS_LIST *)buf;
int num = slist->iAddressCount;
if(num > 0)
{
pAddrInet = ((SOCKADDR_IN*)slist->Address[num-1].lpSockaddr);
pAddrString = inet_ntoa(pAddrInet->sin_addr);
printf("IP:%s/r/n/n",pAddrString);
}
else
{
printf("网卡没有连接!/r/n/n");
}
return true;
}
使用WSAIoctl和SIO_ADDRESS_LIST_QUERY去查询本机ip
最新推荐文章于 2022-07-28 15:02:48 发布