Linux C代码 获取IP地址
2024-10-21 12:40:32
Ubuntu 16.04下,可编译通过:
#include <stdio.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <cstring> #define MAX_LENGTH 254 int main(void)
{
char ipAddr[MAX_LENGTH]; ipAddr[] = '\0'; struct ifaddrs * ifAddrStruct = NULL;
void * tmpAddrPtr = NULL; if (getifaddrs(&ifAddrStruct) != )
{
//if wrong, go out!
printf("Somting is Wrong!\n");
return -;
} struct ifaddrs * iter = ifAddrStruct; while (iter != NULL) {
if (iter->ifa_addr->sa_family == AF_INET) { //if ip4
// is a valid IP4 Address
tmpAddrPtr = &((struct sockaddr_in *)iter->ifa_addr)->sin_addr;
char addressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
if (strlen(ipAddr) + strlen(addressBuffer) < MAX_LENGTH - )
{
if (strlen(ipAddr) > )
{
strcat(ipAddr, ";");
}
strcat(ipAddr, addressBuffer);
}
else
{
printf("Too many ips!\n");
break;
}
}
//else if (ifaddrstruct->ifa_addr->sa_family == af_inet6) { // check it is ip6 /* deal ip6 addr */
// tmpaddrptr = &((struct sockaddr_in *)ifaddrstruct->ifa_addr)->sin_addr;
// char addressbuffer[inet6_addrstrlen];
// inet_ntop(af_inet6, tmpaddrptr, addressbuffer, inet6_addrstrlen); //}
iter = iter->ifa_next;
}
//releas the struct
freeifaddrs(ifAddrStruct); printf("The ips: %s\n", ipAddr); return ;
}
效果:
最新文章
- virtio-blk简介[转]
- JS json的使用
- XML文件数据操作
- 找规律 Codeforces Round #290 (Div. 2) A. Fox And Snake
- python 杨辉三角
- javascript 中的 true 或 false
- [原创] linux课堂-学习笔记-目录及概况
- 【转】Android 驱动开发系列四
- SQL SERVER 2012疑难问题解决方法
- Review1-11
- html 数字不转行问题
- postman 第6节录制case
- CoordinatorLayout的使用
- 为PHP摇旗呐喊!
- 用泛型创建SqlServerHelper类实现增删改查(一)
- SCNN车道线检测--(SCNN)Spatial As Deep: Spatial CNN for Traffic Scene Understanding(论文解读)
- android的消息通知栏
- RabbitMq (1)
- ACM-ICPC 2018 南京赛区网络预赛 L.Magical Girl Haze(分层最短路)
- 图形界面至少要有一个顶级Swing容器