当前位置:  技术问答>linux和unix

大家帮我看看这段取IP地址的代码?

    来源: 互联网  发布时间:2015-07-30

    本文导语:  int GetIPAddress(std::vector &addrlist) { addrlist.clear(); char szBuff[256]; if(gethostname(szBuff, sizeof(szBuff)) != 0) { printf("Cannot get host namen"); return 0; } struct hostent * pAddrInfo = gethostbyname(szBuff); if(!pAddrInfo->h_addr_list[0]) { p...

int GetIPAddress(std::vector &addrlist)
{
addrlist.clear();
char szBuff[256];
if(gethostname(szBuff, sizeof(szBuff)) != 0)
{
printf("Cannot get host namen");
return 0;
}
struct hostent * pAddrInfo = gethostbyname(szBuff);
if(!pAddrInfo->h_addr_list[0])
{
printf("Cannot get network address!n");
return 0;
}
int i = 0;
string szAddr;
while(pAddrInfo->h_addr_list[i]){
szAddr = inet_ntoa(*(struct in_addr *)pAddrInfo->h_addr_list[i]); 
addrlist.push_back(szAddr);
++i;
}
return addrlist.size();
}

为什么只能取到127。0。0。1阿

|
#include 
#include 
#include 

#include 
#include 
//#include 
#include 
#include 
#include 

#ifdef SOLARIS
#include 
#endif

#define MAXINTERFACES   16

int
main (int argc, char *argv[])
{
  register int fd, intrface, retn = 0;
  struct ifreq buf[MAXINTERFACES];
  struct arpreq arp;
  struct ifconf ifc;

  if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0)
    {
      ifc.ifc_len = sizeof buf;
      ifc.ifc_buf = (caddr_t) buf;
      if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc))
{
  intrface = ifc.ifc_len / sizeof (struct ifreq);
  printf ("interface num is intrface=%dnnn", intrface);
  while (intrface-- > 0)
    {
      printf ("net device %sn", buf[intrface].ifr_name);

/*Jugde whether the net card status is promisc  */
      if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface])))
{
  if (buf[intrface].ifr_flags & IFF_PROMISC)
    {
      puts ("the interface is PROMISC");
      retn++;
    }
}
      else
{
  char str[256];

  sprintf (str, "cpm: ioctl device %s",
   buf[intrface].ifr_name);
  perror (str);
}

/*Jugde whether the net card status is up       */
      if (buf[intrface].ifr_flags & IFF_UP)
{
  puts ("the interface status is UP");
}
      else
{
  puts ("the interface status is DOWN");
}

/*Get IP of the net card */
      if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))
{
  puts ("IP address is:");
  puts (inet_ntoa(((struct sockaddr_in *) (&buf[intrface].ifr_addr))->sin_addr));
  puts ("");
  //puts (buf[intrface].ifr_addr.sa_data); 
}
      else
{
  char str[256];

  sprintf (str, "cpm: ioctl device %s",
   buf[intrface].ifr_name);
  perror (str);
}
/* this section can't get Hardware Address,I don't know whether the reason is module driver*/
//          ((struct sockaddr_in*)&arp.arp_pa)->sin_addr=((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr; 
#ifdef SOLARIS
      arp.arp_pa.sa_family = AF_INET;
      arp.arp_ha.sa_family = AF_INET;
      ((struct sockaddr_in *) &arp.arp_pa)->sin_addr.s_addr =
((struct sockaddr_in *) (&buf[intrface].ifr_addr))->sin_addr.
s_addr;
      if (!(ioctl (fd, SIOCGARP, (char *) &arp)))
{
  puts ("HW address is:");

  printf ("%02x:%02x:%02x:%02x:%02x:%02xn",
  (unsigned char) arp.arp_ha.sa_data[0],
  (unsigned char) arp.arp_ha.sa_data[1],
  (unsigned char) arp.arp_ha.sa_data[2],
  (unsigned char) arp.arp_ha.sa_data[3],
  (unsigned char) arp.arp_ha.sa_data[4],
  (unsigned char) arp.arp_ha.sa_data[5]);

  puts ("");
  puts ("");
}


#else
#if 0
/*Get HW ADDRESS of the net card */
      if (!(ioctl (fd, SIOCGENADDR, (char *) &buf[intrface])))
{
  puts ("HW address is:");

  printf ("%02x:%02x:%02x:%02x:%02x:%02xn",
  (unsigned char) buf[intrface].ifr_enaddr[0],
  (unsigned char) buf[intrface].ifr_enaddr[1],
  (unsigned char) buf[intrface].ifr_enaddr[2],
  (unsigned char) buf[intrface].ifr_enaddr[3],
  (unsigned char) buf[intrface].ifr_enaddr[4],
  (unsigned char) buf[intrface].ifr_enaddr[5]);

  puts ("");
  puts ("");
}
#endif
      if (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface])))
{
  puts ("HW address is:");

  printf ("%02x:%02x:%02x:%02x:%02x:%02xn",
  (unsigned char) buf[intrface].ifr_hwaddr.sa_data[0],
  (unsigned char) buf[intrface].ifr_hwaddr.sa_data[1],
  (unsigned char) buf[intrface].ifr_hwaddr.sa_data[2],
  (unsigned char) buf[intrface].ifr_hwaddr.sa_data[3],
  (unsigned char) buf[intrface].ifr_hwaddr.sa_data[4],
  (unsigned char) buf[intrface].ifr_hwaddr.
  sa_data[5]);

  puts ("");
  puts ("");
}
#endif

      else
{
  char str[256];

  sprintf (str, "cpm: ioctl device %s",
   buf[intrface].ifr_name);
  perror (str);
}
    }
}
      else
perror ("cpm: ioctl");

    }
  else
    perror ("cpm: socket");

  close (fd);
  return retn;
}

    
 
 

您可能感兴趣的文章:

  • sh 里面ftp上传文件的代码。大侠帮忙看看下面的代码有什么问题
  • 想看看linux的内核源代码!从哪里开始!给点建议!!
  • shell 编程 从0到10求和 ,代码有错,请高手看看
  • 请推荐点Linux代码看看
  • 各位大侠,帮我看看为什么代码执行错误!!!
  • 帮我看看这段代码什么意思
  • 帮忙看看下边代码有什么问题
  • 工作需要看源代码,看看我多少天能完成任务……
  • 看看这个代码问题在哪?
  • 高手看看这段代码错在哪里
  • 大家看看以下一小段代码的可行性,参与有分
  • 各位师兄师姐再帮忙看看为什么下面的代码运行时出错?
  • 请帮忙看看下面这段代码在jsp中怎么实现阿?
  • 帮我看看这段代码,很奇怪啊
  • 帮看看一小段代码
  • 我是JAVA的一位初学者请各位师兄师姐帮忙看看下面的代码为什么会提示出错?
  • 帮看看我这断代码!有分奖励!
  • 一段简单的数据库调用代码!请大虾帮忙看看!!
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!(在线等待)
  • 那位大侠帮忙看看下面这两句代码什么意思??
  • 驱动给地址写值的问题,大家看看
  • 这里有没有人熟悉规则表达式,帮我看看这个过滤IP地址的表达式哪里错了。。。
  • Flash与S3C44B0X连接时地址线为什么要偏移一位,对应的代码也不甚清楚,劳烦各位大侠给看看。小弟先在此谢过了。
  • 将域名转换为IP地址的小程序,整个程序运行完毕后出现段错误,请高手看看
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 简单!看看这个方法!简单!看看这个方法!
  • linux高手看看
  • 好消息,近来看看......
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 我初学JAVA,大家愿意交朋友的进来看看!留QQ的给分啊!
  • 关于全选的问题大家帮忙看看~
  • jsp论坛,大家快去看看,解决树形目录http://52jsp.126.com
  • 各位大侠,小侠,快过来看看。
  • 看过操作系统设计与实现的进来看看
  • 请进来看看!!
  • 帮我看看下面这条语句??
  • 大家去软件工程论坛里面去看看那,我发了700分的问题!!
  • 建议去这里看看,有好多基本的重要知识! 绝对值得一看!
  • 大家帮我看看,我好把贴子结了,里面有100分。。。。。。
  • 到 http://www.xbit2008.com 看看技术文章把! 我写的或从网上摘的!
  • 虚心请教问题,帮我看看好吗?
  • 我刚申请的域名rootsafe.com大家看看怎么样? up有分!
  • 帮我看看是不是被黑了?
  • 我的Solaris启动不了了,请帮忙看看
  • 能不能帮我看看!!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3