首先介绍一下用到的结构体

struct hostent {
  const char *h_name; // official name of host
  char **h_aliases; // alias list
  short h_addrtype; // host address type
  short h_length; // length of address
  char **h_addr_list; // list of addresses from name server
  #define h_addr h_addr_list[0] // address, for backward compatiblity
};

struct in_addr {

  in_addr_t s_addr;
};

这里是这个数据结构的详细资料:
struct hostent:
  h_name – 地址的正式名称。
  h_aliases – 空字节-地址的预备名称的指针。
  h_addrtype – 地址类型; 通常是AF_INET。
  h_length – 地址的比特长度。
  h_addr_list – 零字节-主机网络地址指针,网络字节顺序。
  h_addr - h_addr_list中的第一地址。
gethostbyname() 成功时返回一个指向结构体 hostent 的指针,或者 是个空 (NULL) 指针, 完整代码如下:

#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

int main()
{
  char name[65];
  struct hostent* pHost;
  struct hostent hs;
  int i, j;
  int cnt = 0;
  char *ips[8];

  gethostname(name, sizeof(name));
  printf("hostname = %s\n", name);

  /* 获取本机地址 */
  pHost = &hs;
  pHost = gethostbyname(name);

  printf("%s\n",pHost->h_name);
  printf("%d\n",pHost->h_addr);
  struct in_addr *in= (struct in_addr *)pHost->h_addr;
  printf("%s\n", inet_ntoa(*in));

  for (i = 0; pHost != 0 && pHost->h_addr_list[i] != 0; i++) {
    char ip[16]; ip[0] = 0;
    for (j = 0; j < pHost->h_length; j++) {
      char tmp[16];
      if(j > 0) {
        strcat(ip, ".");
      }
      sprintf( tmp, "%u",
          (unsigned int)((unsigned char*)pHost->h_addr_list[i])[j]);
        strcat(ip, tmp);
    }
    ips[cnt] = (char*)malloc(64);
    strcpy(ips[cnt++], ip);
  }

  return 0;
}

怎样获取本机的ip地址的更多相关文章

  1. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  2. 获取本机的IP地址(局域网)与主机名称

    编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ e ...

  3. 获取本机的IP地址和mac地址

    1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address() ...

  4. Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP

    Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...

  5. 获取本机的ip地址(排除虚拟机,蓝牙等ip)

    项目中遇到了要获取本地ip的需求,网上查找资料遇到很多坑,很多Java获取本机ip地址的方法要么是根本获取不到,要么是获取的有问题. 网上常见的方法如下 InetAddress.getLocalHos ...

  6. C++获取本机的ip地址程序

    #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库 class CInitSock ...

  7. android获取本机的IP地址和mac物理地址

    /获取本机IP地址 public String getLocalIpAddress() { WifiManager wifiManager = (WifiManager) getSystemServi ...

  8. C#获取本机IP方法,获取本机局域网IP地址方法

    1. private void GetIP() { string hostName = Dns.GetHostName();//本机名 //System.Net.IPAddress[] address ...

  9. 获取本机的IP地址

    /// <summary> /// 获取本机IP地址 /// </summary> /// <returns>本机IP地址</returns> publ ...

随机推荐

  1. CA签发工具

    #!/bin/bash #author Sun Ying #date:2015-12-17 if [ $# -lt 1 ];then echo -e "\033[34mUsage: `bas ...

  2. C# 基础排序与查找算法

    排序算法: class Sort { static void swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = tmp; } #regio ...

  3. 常用MySQL命令整理

    备份数据库 #.备份数据库到sql文件 mysqldump --add-drop-database -h localhost -uusername ppassword dbname > dbna ...

  4. 比较常用的几个maven第三方镜像

    OSC的:<mirror>    <id>CN</id>    <name>OSChina Central</name>           ...

  5. 【转载-pdcxs007】 Windows7配置CTex+Texmaker

    !! 安装CTex会覆盖系统原来的环境变量里面的系统路径!! 坑人! Windows7配置CTex+Texmaker CTex和Texmaker的下载方法就不必细谈了,在官方网站上有.主要是CTex建 ...

  6. HDOJ(1238) KMP

    Substrings http://acm.hdu.edu.cn/showproblem.php?pid=1238 先找到长度最短的字符串,把它的子串和该子串的逆序(按长度从大到小)依次与其他字符串匹 ...

  7. MyEclipse配置Tomcat 6

    打开首选项 禁用MyEclipse自带的Tomcat 6 下载apache-tomcat-6.0.29.tar.gz 地址:http://yunpan.cn/cKg6kq2RmjdUB  提取码 98 ...

  8. netty发送utf-8编码的信息

    /** * */ @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // (1) // ...

  9. mysql - 缺失范围和连续范围

    初始化数据 # 创建表 DROP TABLE IF EXISTS g; CREATE TABLE g( a INT )ENGINE=INNODB; # 初始化数据 ; ; ; ; ; ; ; ; ; ...

  10. vim 标记 mark 详解 (转载)

    http://www.cnblogs.com/jianyungsun/archive/2011/02/14/1954057.html Vim 允许你在文本中放置自定义的标记.命令 "ma&q ...