我如何输出我的主机的IP地址,从C程序? [英] How do I output my host’s IP addresses from a C program?

查看:143
本文介绍了我如何输出我的主机的IP地址,从C程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从我的本地计算机上显示的所有IP地址,用C语言编写。如何才能做到这一点?


解决方案

 的#include<&stdio.h中GT;
#包括LT&;&stropts.h GT;
#包括LT&; SYS / socket.h中>
#包括LT&; SYS / ioctl.h>
#包括LT&; Linux的/ netdevice.h>
#包括LT&; ARPA / inet.h>
#包括LT&; netinet / in.h中>
#包括LT&;&unistd.h中GT;INT print_addresses(const int的域)
{
  int类型;
  结构的ifconf的ifconf;
  结构的ifreq IFR [50];
  INT IFS;
  INT I;  S =插座(域,SOCK_STREAM,0);
  如果(S℃,){
    PERROR(插座);
    返回0;
  }  ifconf.ifc_buf =(字符*)IFR;
  ifconf.ifc_len = sizeof的IFR;  如果(的ioctl(S,SIOCGIFCONF,&安培;的ifconf)== -1){
    PERROR(的ioctl);
    返回0;
  }  IFS = ifconf.ifc_len /的sizeof(IFR [0]);
  的printf(接口=%D:\\ n,IFS);
  对于(i = 0; I< IFS;我++){
    焦炭IP [INET_ADDRSTRLEN]
    结构SOCKADDR_IN * s_in =(结构SOCKADDR_IN *)及IFR [I] .ifr_addr;    如果(inet_ntop(域,和放大器;!s_in-> sin_addr,属于知识产权,sizeof的(IP))){
      PERROR(inet_ntop);
      返回0;
    }    的printf(%S - %S \\ n,IFR [I] .ifr_name,IP);
  }  接近(S);  返回1;
}INT主(INT ARGC,CHAR *的argv [])
{
  INT域[] = {AF_INET,AF_INET6};
  INT I;  对于(I = 0; I&下;的sizeof(域)/的sizeof(畴[0]);我+ +)
    如果(!print_addresses(域[I]))
      返回1;  返回0;
}

I need to display all the IP addresses from my local computer, using the C language. How can this be done?

解决方案

#include <stdio.h>
#include <stropts.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/netdevice.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>

int print_addresses(const int domain)
{
  int s;
  struct ifconf ifconf;
  struct ifreq ifr[50];
  int ifs;
  int i;

  s = socket(domain, SOCK_STREAM, 0);
  if (s < 0) {
    perror("socket");
    return 0;
  }

  ifconf.ifc_buf = (char *) ifr;
  ifconf.ifc_len = sizeof ifr;

  if (ioctl(s, SIOCGIFCONF, &ifconf) == -1) {
    perror("ioctl");
    return 0;
  }

  ifs = ifconf.ifc_len / sizeof(ifr[0]);
  printf("interfaces = %d:\n", ifs);
  for (i = 0; i < ifs; i++) {
    char ip[INET_ADDRSTRLEN];
    struct sockaddr_in *s_in = (struct sockaddr_in *) &ifr[i].ifr_addr;

    if (!inet_ntop(domain, &s_in->sin_addr, ip, sizeof(ip))) {
      perror("inet_ntop");
      return 0;
    }

    printf("%s - %s\n", ifr[i].ifr_name, ip);
  }

  close(s);

  return 1;
}

int main(int argc, char *argv[])
{
  int domains[] = { AF_INET, AF_INET6 };
  int i;

  for (i = 0; i < sizeof(domains) / sizeof(domains[0]); i++)
    if (!print_addresses(domains[i]))
      return 1;

  return 0;
}

这篇关于我如何输出我的主机的IP地址,从C程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆