Example #1
0
DWORD getNumTcpEntries(void)
{
#if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H)
   return getNumWithOneHeader ("net.inet.tcp.pcblist");
#else
   return getNumWithOneHeader ("/proc/net/tcp");
#endif
}
Example #2
0
DWORD getNumRoutes(void)
{
#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
   int mib[6] = {CTL_NET, PF_ROUTE, 0, PF_INET, NET_RT_DUMP, 0};
   size_t needed;
   char *buf, *lim, *next;
   struct rt_msghdr *rtm;
   DWORD RouteCount = 0;

   if (sysctl (mib, 6, NULL, &needed, NULL, 0) < 0)
   {
      ERR ("sysctl 1 failed!\n");
      return 0;
   }

   buf = HeapAlloc (GetProcessHeap (), 0, needed);
   if (!buf) return 0;

   if (sysctl (mib, 6, buf, &needed, NULL, 0) < 0)
   {
      ERR ("sysctl 2 failed!\n");
      HeapFree (GetProcessHeap (), 0, buf);
      return 0;
   }

   lim = buf + needed;
   for (next = buf; next < lim; next += rtm->rtm_msglen)
   {
      rtm = (struct rt_msghdr *)next;

      if (rtm->rtm_type != RTM_GET)
      {
         WARN ("Got unexpected message type 0x%x!\n",
               rtm->rtm_type);
         continue;
      }

      /* Ignore all entries except for gateway routes which aren't
         multicast */
      if (!(rtm->rtm_flags & RTF_GATEWAY) || (rtm->rtm_flags & RTF_MULTICAST))
         continue;

      RouteCount++;
   }

   HeapFree (GetProcessHeap (), 0, buf);
   return RouteCount;
#else
   return getNumWithOneHeader("/proc/net/route");
#endif
}
Example #3
0
DWORD getNumArpEntries(void)
{
#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
  int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS, RTF_LLINFO};
#define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
  DWORD arpEntries = 0;
  size_t needed;
  char *buf, *lim, *next;
  struct rt_msghdr *rtm;
  struct sockaddr_inarp *sinarp;
  struct sockaddr_dl *sdl;

  if (sysctl (mib, MIB_LEN,  NULL, &needed, NULL, 0) == -1)
  {
     ERR ("failed to get size of arp table\n");
     return 0;
  }

  buf = HeapAlloc (GetProcessHeap (), 0, needed);
  if (!buf) return 0;

  if (sysctl (mib, MIB_LEN, buf, &needed, NULL, 0) == -1)
  {
     ERR ("failed to get arp table\n");
     HeapFree (GetProcessHeap (), 0, buf);
     return 0;
  }

  lim = buf + needed;
  next = buf;
  while(next < lim)
  {
      rtm = (struct rt_msghdr *)next;
      sinarp=(struct sockaddr_inarp *)(rtm + 1);
      sdl = (struct sockaddr_dl *)((char *)sinarp + ROUNDUP(sinarp->sin_len));
      if(sdl->sdl_alen) /* arp entry */
      arpEntries++;
      next += rtm->rtm_msglen;
  }
  HeapFree (GetProcessHeap (), 0, buf);
  return arpEntries;
#endif
  return getNumWithOneHeader("/proc/net/arp");
}
Example #4
0
DWORD getNumTcpEntries(void)
{
  return getNumWithOneHeader("/proc/net/tcp");
}
Example #5
0
DWORD getNumUdpEntries(void)
{
  return getNumWithOneHeader("/proc/net/udp");
}