Linux C打印IP地址信息

简介:

1、由文件描述符打印IP地址及端口。(参考)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
 
//由文件描述符打印对应IP地址和端口
void  PrintAddrByFd( int  sockfd)
{
     struct  sockaddr_in addr_in;
     socklen_t len =  sizeof (addr_in);
     getsockname(sockfd, ( struct  sockaddr *)&addr_in, &len);
     if  (addr_in.sin_family != AF_INET) {
         printf ( "Not an Internet socket.\n" );
         return ;
     }
     printf ( "addr:%s, port:%d\n" , inet_ntoa(addr_in.sin_addr), ntohs(addr_in.sin_port));
}

2、打印本机所有IP地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>      
#include <ifaddrs.h>
#include <netinet/in.h> 
 
//打印本机所有IP地址
int  main ( int  argc,  const  char  * argv[]) 
{
     struct  ifaddrs * ifAddrStruct = NULL;
     void  * tmpAddrPtr = NULL;
 
     getifaddrs(&ifAddrStruct);
 
     while  (ifAddrStruct != NULL) 
     {
         if  (ifAddrStruct->ifa_addr->sa_family == AF_INET)
         {    // check it is IP4
             // is a valid IP4 Address
             tmpAddrPtr = &(( struct  sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
             char  addressBuffer[INET_ADDRSTRLEN];
             inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
             printf ( "%s IPV4 Address %s\n" , ifAddrStruct->ifa_name, addressBuffer); 
         }
         else  if  (ifAddrStruct->ifa_addr->sa_family == AF_INET6)
         {    // check it is IP6
             // is a valid IP6 Address
             tmpAddrPtr=&(( struct  sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
             char  addressBuffer[INET6_ADDRSTRLEN];
             inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
             printf ( "%s IPV6 Address %s\n" , ifAddrStruct->ifa_name, addressBuffer); 
        
         ifAddrStruct = ifAddrStruct->ifa_next;
     }
     return  0;
}


参考链接:

1、怎么获取绑定的socket的地址的端口号

2、Linux下靠谱的获取本机IP地址的C代码实现


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1741099如需转载请自行联系原作者


RQSLT

相关文章
|
2月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
12天前
|
Web App开发 资源调度 网络协议
Linux系统之部署IP工具箱MyIP
【10月更文挑战第5天】使用Docker部署Radicale日历和联系人应用Linux系统之部署IP工具箱MyIP
43 1
Linux系统之部署IP工具箱MyIP
|
17天前
|
网络协议 Linux 开发工具
linux系统配置固定地址
linux系统配置固定地址
|
20天前
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
40 0
Linux实践|设置静态 IP 地址
|
2月前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
2月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
1月前
|
Linux API 开发工具
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
|
2月前
|
网络协议 Linux
在Linux中,如何改IP、主机名、DNS?
在Linux中,如何改IP、主机名、DNS?
|
2月前
|
网络协议 Ubuntu Linux
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
|
2月前
|
监控 网络协议 Linux
在Linux中,如何查看当前系统每个 IP 的连接数?
在Linux中,如何查看当前系统每个 IP 的连接数?