[Openvas-commits] r7390 - in trunk/openvas-libraries: . misc

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Apr 21 15:42:56 CEST 2010


Author: chandra
Date: 2010-04-21 15:42:51 +0200 (Wed, 21 Apr 2010)
New Revision: 7390

Modified:
   trunk/openvas-libraries/ChangeLog
   trunk/openvas-libraries/misc/pcap.c
Log:
Replaced pcap_findalldevs with getifaddrs

Modified: trunk/openvas-libraries/ChangeLog
===================================================================
--- trunk/openvas-libraries/ChangeLog	2010-04-21 11:10:07 UTC (rev 7389)
+++ trunk/openvas-libraries/ChangeLog	2010-04-21 13:42:51 UTC (rev 7390)
@@ -1,3 +1,8 @@
+2010-04-21  Preeti Subramanian <spreeti at secpod.com>
+
+	* misc/pcap.c (v6_getinterfaces): Replaced pcap_findalldevs() with
+	getifaddrs().
+
 2010-04-20  Felix Wolfsteller <felix.wolfsteller at greenbone.net>
 
 	Mark remotely authenticated Administrators with isadmin flag. Resolved

Modified: trunk/openvas-libraries/misc/pcap.c
===================================================================
--- trunk/openvas-libraries/misc/pcap.c	2010-04-21 11:10:07 UTC (rev 7389)
+++ trunk/openvas-libraries/misc/pcap.c	2010-04-21 13:42:51 UTC (rev 7390)
@@ -29,7 +29,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/types.h>
+#include <ifaddrs.h>
 
+
 #include "bpf_share.h"
 #include "pcap_openvas.h"
 #include "system_internal.h"
@@ -632,88 +635,64 @@
 
 struct interface_info *v6_getinterfaces(int *howmany)
 {
-  char errbuf[PCAP_ERRBUF_SIZE];
-  pcap_if_t *alldevap;
-  pcap_if_t *tmp;
-  int retval;
-  pcap_addr_t *addr;
-  struct sockaddr *sa;
   struct sockaddr_in *saddr;
   struct sockaddr_in6 *s6addr;
   static struct interface_info mydevs[1024];
   int numinterfaces = 0;
+  struct ifaddrs *ifaddr, *ifa;
+  int family;
 
-  #ifdef TCPIP_DEBUGGING
-    char ipaddr[INET6_ADDRSTRLEN];
-  #endif
-
-  memset(errbuf, 0, sizeof(errbuf));
-
-  retval = pcap_findalldevs(&alldevap, errbuf);
-  if(retval == -1)
-  {
-    printf("pcap_findalldevs returned error %s\n",errbuf);
-  }
+  if (getifaddrs(&ifaddr) == -1) {
+      perror("getifaddrs");
+   }
   else
   {
-    tmp = alldevap;
-    while(tmp)
-    {
-      if(tmp->addresses)
-      {
-        addr = tmp->addresses;
-        while(addr)
-        {
-          sa = addr->addr;
-          if(sa->sa_family == AF_INET)
-          {
-            memcpy(mydevs[numinterfaces].name,tmp->name, strlen(tmp->name));
-            saddr = (struct sockaddr_in *) sa;
+    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
+      family = ifa->ifa_addr->sa_family;
+      if(family == AF_INET)
+         {
+            memcpy(mydevs[numinterfaces].name,ifa->ifa_name, strlen(ifa->ifa_name));
+            saddr = (struct sockaddr_in *) ifa->ifa_addr;
             mydevs[numinterfaces].addr6.s6_addr32[0] = 0;
             mydevs[numinterfaces].addr6.s6_addr32[1] = 0;
             mydevs[numinterfaces].addr6.s6_addr32[2] = htonl(0xffff);
             mydevs[numinterfaces].addr6.s6_addr32[3] = saddr->sin_addr.s_addr;
-            saddr = (struct sockaddr_in *) addr->netmask;
+            saddr = (struct sockaddr_in *) ifa->ifa_netmask;
             mydevs[numinterfaces].mask.s6_addr32[0] = 0;
             mydevs[numinterfaces].mask.s6_addr32[1] = 0;
             mydevs[numinterfaces].mask.s6_addr32[2] = htonl(0xffff);
             mydevs[numinterfaces].mask.s6_addr32[3] = saddr->sin_addr.s_addr;
 #ifdef TCPIP_DEBUGGING
-	          printf("interface name is %s\n",tmp->name);
+            printf("interface name is %s\n",ifa->ifa_name);
             printf("\tAF_INET family\n");
             printf("\taddress is %s\n",inet_ntoa(saddr->sin_addr));
             printf("\tnetmask is %s\n",inet_ntoa(saddr->sin_addr));
 #endif
             numinterfaces++;
           }
-          else if(sa->sa_family == AF_INET6)
+        else if(family == AF_INET6)
           {
-            memcpy(mydevs[numinterfaces].name,tmp->name, strlen(tmp->name));
-            s6addr = (struct sockaddr_in6 *) sa;
-            memcpy(&(mydevs[numinterfaces].addr6), (char *) &(s6addr->sin6_addr), sizeof(struct in6_addr));
-            s6addr = (struct sockaddr_in6 *) addr->netmask;
-            memcpy(&(mydevs[numinterfaces].mask), (char *) &(s6addr->sin6_addr), sizeof(struct in6_addr));
-            numinterfaces++;
+             memcpy(mydevs[numinterfaces].name,ifa->ifa_name, strlen(ifa->ifa_name));
+             s6addr = (struct sockaddr_in6 *) ifa->ifa_addr;
+             memcpy(&(mydevs[numinterfaces].addr6), (char *) &(s6addr->sin6_addr), sizeof(struct in6_addr));
+             s6addr = (struct sockaddr_in6 *) ifa->ifa_netmask;
+             memcpy(&(mydevs[numinterfaces].mask), (char *) &(s6addr->sin6_addr), sizeof(struct in6_addr));
+             numinterfaces++;
 #ifdef TCPIP_DEBUGGING
-            printf("\tAF_INET6 family\n");
-	          printf("interface name is %s\n",tmp->name);
-            printf("\taddress is %s\n",inet_ntop(AF_INET6, &s6addr->sin6_addr, ipaddr, sizeof(ipaddr)));
-            printf("\tnetmask is %s\n",inet_ntop(AF_INET6, &s6addr->sin6_addr, ipaddr, sizeof(ipaddr)));
+             printf("\tAF_INET6 family\n");
+             printf("interface name is %s\n",ifa->ifa_name);
+             printf("\taddress is %s\n",inet_ntop(AF_INET6, &s6addr->sin6_addr, ipaddr, sizeof(ipaddr)));
 #endif
-          }
-          else
-          {
+           }
+         else
+           {
 #ifdef TCPIP_DEBUGGING
-            printf("\tfamily is %d\n",sa->sa_family);
+             printf("\tfamily is %d\n",ifa->ifa_addr->sa_family);
 #endif
-          }
-          addr = addr->next;
-        }
+           }
       }
-      tmp = tmp->next;
-    }
     *howmany = numinterfaces;
-  }
+   }
   return mydevs;
 }
 



More information about the Openvas-commits mailing list