请问 , 用c语言怎样获取ip地址啊 谢谢了

请问 , 用c语言怎样获取ip地址啊 谢谢了,第1张

看你要获得那里的ip地址

如果是本及机的话,就使用windows的API啊

#include "winsock.h"

WORD wVersionRequested

WSADATA wsaData

char name[255]

char* ip

PHOSTENT hostinfo

wVersionRequested = MAKEWORD( 2, 0 )

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )

{

if( gethostname ( name, sizeof(name)) == 0)

{

if((hostinfo = gethostbyname(name)) != NULL)

{

ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list)

}

}

// ip is ready

WSACleanup( )

}

这里的代码可以打印出电脑默认的DNS服务器

参考资料:http://blog.csdn.net/shimazhuge/article/details/8949508

#pragma warning(disable:4996)

#include <stdio.h>  

#include <WinSock2.h>  

#include <iphlpapi.h>  

#pragma comment(lib, "IPHLPAPI.lib")  

#pragma comment(lib, "ws2_32.lib")  

int main() // 获取本地主机名、域名和DNS服务器信息  

{

// 声明变量  

FIXED_INFO * FixedInfo     // 定义保存本地计算机网络参数信息的结构体指针  

ULONG    ulOutBufLen       // 保存获取到的本地计算机网络参数信息结构体链表的长度  

DWORD    dwRetVal          // 调用GetNetworkParams()函数的返回值  

IP_ADDR_STRING * pIPAddr   // 保存所有DNS服务器的IP地址列表  

FixedInfo = (FIXED_INFO *)GlobalAlloc(GPTR, sizeof(FIXED_INFO))   // 为FixedInfo结构体分配内存空间  

ulOutBufLen = sizeof(FIXED_INFO)         // 初始化ulOutBufLen变量值  

  // 第1次调用GetNetworkParams()函数,获取返回结果的大小到ulOutBufLen中  

if (ERROR_BUFFER_OVERFLOW == GetNetworkParams(FixedInfo, &ulOutBufLen))

{

GlobalFree(FixedInfo)

FixedInfo = (FIXED_INFO *)GlobalAlloc(GPTR, ulOutBufLen)

}

// 第2次调用GetNetworkParams()函数,以前面获取的ulOutBufLen作为参数,  

if (dwRetVal = GetNetworkParams(FixedInfo, &ulOutBufLen) != ERROR_SUCCESS)

{

printf("调用GetNetworkParams()函数失败。返回值: %08x\n", dwRetVal)

}

else

{

printf("\nDNS服务器列表:\n")

printf("%s\n", FixedInfo->DnsServerList.IpAddress.String)

pIPAddr = FixedInfo->DnsServerList.Next

while (pIPAddr)

{

printf("\t%s\n", pIPAddr->IpAddress.String)

pIPAddr = pIPAddr->Next

}

}

printf("按下回车键结束\n")

getchar()

return 0

}

struct in_addr addr

hostent *pHost = ::gethostbyname("localhost")//在此写入你自己电脑主机名字

switch (pHost->h_addrtype) {

case AF_INET:

printf("internet网络地址类型(AF_INET)\n")

break

case AF_INET6:

printf("internet网络地址类型(AF_INET)\n")

break

case AF_NETBIOS:

printf("netbios网络地址类型(AF_NETBIOS)\n")

break

default:

printf("其它地址类型 %d\n", pHost->h_addrtype)

break

}

printf("\t地址长度: %d(字节)\n", pHost->h_length)

addr.s_addr = *(u_long *) pHost->h_addr_list[0]

printf("\t第一个IP地址为: %s\n", inet_ntoa(addr))


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/286082.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存