Windows和Linux得到本机IP地址的通用函数

转载 2004年09月10日 17:48:00

Windows和Linux得到本机IP地址的通用函数

//参数:

ipbuf :存放得到的IP地址列表的数组,实际大小由bufcount指定。

bufcount:想要得到的IP地址列表的个数。

#ifdef _WIN32

#include <winsock2.h>
#include <Ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")

#else

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <unistd.h>

#endif

int getselfiplist(unsigned long ipbuf[],int bufcount)
{
  int i,count=0;
#ifdef _WIN32
  char hostname[128];
  struct hostent* inaddrs;
  if(gethostname(hostname,128)==0)
  {
    inaddrs=gethostbyname(hostname);
    if(inaddrs)
    {
      count=inaddrs->h_length/sizeof(in_addr);
      if(count>bufcount)count=bufcount;
      for(i=0;i<count;i++)
      {
        ipbuf[i]=*(unsigned long*)inaddrs->h_addr_list[i];
      }
    }
  }
#else
  int sock;
  struct sockaddr_in sin;
  struct ifreq ifr;
 
  sock = socket(AF_INET, SOCK_DGRAM, 0);
  if(sock>=0)//!<0
  {
    if(bufcount>100)bufcount=100;   
    for(i=0;i<bufcount;i++)
    {
      sprintf(ifr.ifr_name,"eth%d",i);
      if(ioctl(sock,SIOCGIFADDR,&ifr)<0) break;
      ::memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
      ipbuf[count++]=sin.sin_addr.s_addr;
    }
    close(sock);
  }
#endif
  return count;
}

 

发表于 2004年09月02日 7:50 PM
--------------------------------------------------------------

评论

# 回复:Windows和Linux得到本机IP地址的通用函数 2004-09-03 12:21 AM meteor135
我晕!
不就是:
#ifdef _WIN32

#include <winsock2.h>
#include <Ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")

int getselfiplist(unsigned long ipbuf[],int bufcount)
{
int i,count=0;
char hostname[128];
struct hostent* inaddrs;
if(gethostname(hostname,128)==0)
{
inaddrs=gethostbyname(hostname);
if(inaddrs)
{
count=inaddrs->h_length/sizeof(in_addr);
if(count>bufcount)count=bufcount;
for(i=0;i<count;i++)
{
ipbuf[i]=*(unsigned long*)inaddrs->h_addr_list[i];
}
}
}
return count;
}

#else

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <unistd.h>

int getselfiplist(unsigned long ipbuf[],int bufcount)
{
int i,count=0;
int sock;
struct sockaddr_in sin;
struct ifreq ifr;

sock = socket(AF_INET, SOCK_DGRAM, 0);
if(sock>=0)//!<0
{
if(bufcount>100)bufcount=100;
for(i=0;i<bufcount;i++)
{
sprintf(ifr.ifr_name,"eth%d",i);
if(ioctl(sock,SIOCGIFADDR,&ifr)<0) break;
::memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
ipbuf[count++]=sin.sin_addr.s_addr;
}
close(sock);
}
return count;
}
#endif

除了函数接口规范一样,其他几乎没有相同的,从代码上没什么通用性可言吧!

# 回复:Windows和Linux得到本机IP地址的通用函数 2004-09-03 7:15 AM 完美废人
这跟写两个函数有什么区别……

# 回复:Windows和Linux得到本机IP地址的通用函数 2004-09-03 8:11 AM Vietor
对完美废人:

如果将函数在windows中封装为.dll在linux封装为.so对外提供联接接口不就成通用函数了吗? :-)

两种socket获取本机IP地址方法及获取ip对应网卡

获取计算机的名称和IP地址可以通过调用winsock里面的函数完成,下面上是用到的函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后...
  • qq_26399665
  • qq_26399665
  • 2016年10月22日 00:32
  • 3856

socket获取本机IP地址方法

获取计算机的名称和IP地址可以通过调用winsock里面的函数完成,下面上是用到的函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后...
  • u011608357
  • u011608357
  • 2014年02月07日 00:43
  • 5042

Linux下编程获取本地IP地址的常见方法

在进行Linux网络编程时,经常用到本机IP地址。本文罗列一下常见方法,以备不时之需。获取本机IP地址,是一个相当灵活的操作,原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的。比如一台计算...
  • K346K346
  • K346K346
  • 2016年01月05日 14:15
  • 10514

获取本机IP的方法(Windows和Linux通用)

获取本机IP的方法,Windows和Linux均适用。
  • u010234516
  • u010234516
  • 2016年10月09日 01:10
  • 664

windows和linux环境中分别如何用C语言获得本机IP地址?

转载自:   http://blog.csdn.net/stpeace/article/details/12179021   我们可以在cmd中敲入ipconfig来获取本机ip地址,下面写个程...
  • ljh0302
  • ljh0302
  • 2015年09月22日 14:35
  • 353

获取本机ip地址,并自动区分Windows还是linux操作系统

public static List getLocalIP() { List localIps=new ArrayList(); InetAddress ip = null; try {...
  • wym1581
  • wym1581
  • 2016年01月25日 17:17
  • 760

Linux下如何得到本机所有IP地址及MAC地址

已知:  gethost and gethostbyname,测试只能得到一个IP地址。  ----------------------------------------------------...
  • Junkie0901
  • Junkie0901
  • 2013年11月29日 19:17
  • 506

Windows下获取本机IP地址

  • 2012年08月02日 07:50
  • 17KB
  • 下载

windows下用c++获取本机ip地址

windows下用c++获取本机ip地址工作过程中遇到一个需求,需要获取本机ip地址,同时获取本机网络连接情况,即网线是否连接。经过多番搜索,有如下3种方案。1、管道+多进程思路:在一个cmd中执行i...
  • junbujianwpl
  • junbujianwpl
  • 2017年11月09日 23:03
  • 215

Windows下获取本机IP地址方法介绍

首先说明代码来源于网络,Author: Khalid Shaikh [Shake@ShakeNet.com] if((hostinfo = gethostbyname(name)) !...
  • handyhuang
  • handyhuang
  • 2012年08月02日 07:50
  • 4618
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows和Linux得到本机IP地址的通用函数
举报原因:
原因补充:

(最多只允许输入30个字)