Beispiel #1
0
void wpcap_init(void)
{
  struct in_addr addr;
  FARPROC dlladdr;

  addr.s_addr = htonl(WCAP_IPADDR);
  printf("wpcap_init: IP address: %s\n", inet_ntoa(addr));

  wpcap = LoadLibrary("wpcap.dll");
  dlladdr = GetProcAddress(wpcap, "pcap_findalldevs");
  pcap_findalldevs = (pcap_findalldevs_t)dlladdr;

  dlladdr = GetProcAddress(wpcap, "pcap_open_live");
  pcap_open_live = (pcap_open_live_t)dlladdr;

  dlladdr = GetProcAddress(wpcap, "pcap_next_ex");
  pcap_next_ex = (pcap_next_ex_t)dlladdr;

  dlladdr = GetProcAddress(wpcap, "pcap_sendpacket");
  pcap_sendpacket = (pcap_sendpacket_t)dlladdr;

  if (pcap_findalldevs == NULL || pcap_open_live == NULL ||
      pcap_next_ex == NULL || pcap_sendpacket == NULL)
    {
      error_exit("error on access to winpcap library\n");
    }

  init_pcap(addr);
  set_ethaddr(addr);
}
Beispiel #2
0
/*---------------------------------------------------------------------------*/
void
wpcap_init(void)
{
    struct in_addr addr;

    addr.s_addr = inet_addr((*__argv)[1]);
    if(addr.s_addr == INADDR_NONE) {
        error_exit("usage: <program> <ip addr of ethernet card to share>\n");
    }
    printf("wpcap_init: cmdline address: %s\n", inet_ntoa(addr));

    wpcap = LoadLibrary("wpcap.dll");
    (FARPROC)pcap_findalldevs = GetProcAddress(wpcap, "pcap_findalldevs");
    (FARPROC)pcap_open_live   = GetProcAddress(wpcap, "pcap_open_live");
    (FARPROC)pcap_next_ex     = GetProcAddress(wpcap, "pcap_next_ex");
    (FARPROC)pcap_sendpacket  = GetProcAddress(wpcap, "pcap_sendpacket");

    if(pcap_findalldevs == NULL || pcap_open_live  == NULL ||
            pcap_next_ex     == NULL || pcap_sendpacket == NULL) {
        error_exit("error on access to winpcap library\n");
    }

    init_pcap(addr);
    set_ethaddr(addr);
}
Beispiel #3
0
/*---------------------------------------------------------------------------*/
void
wpcap_init(void)
{
  struct in_addr addr;

#ifdef __CYGWIN__
  addr.s_addr = inet_addr((*__argv)[1]);
#else /* __CYGWIN__ */
  addr.s_addr = inet_addr(__argv[1]);
#endif /* __CYGWIN__ */
  if(addr.s_addr == INADDR_NONE) {
//  error_exit("usage: <program> <ip addr of ethernet card to share>\n");
    addr.s_addr = inet_addr("10.10.10.10");
    log_message("usage: <program> <ip addr of ethernet card to share>\n-->I'll try guessing ", inet_ntoa(addr));
  } else {
    log_message("wpcap_init:cmdline address: ", inet_ntoa(addr));
  }

  wpcap = LoadLibrary("wpcap.dll");
  pcap_findalldevs = (int (*)(struct pcap_if **, char *))
                     GetProcAddress(wpcap, "pcap_findalldevs");
  pcap_open_live   = (struct pcap *(*)(char *, int, int, int, char *))
                     GetProcAddress(wpcap, "pcap_open_live");
  pcap_next_ex     = (int (*)(struct pcap *, struct pcap_pkthdr **, unsigned char **))
                     GetProcAddress(wpcap, "pcap_next_ex");
  pcap_sendpacket  = (int (*)(struct pcap *, unsigned char *, int))
                     GetProcAddress(wpcap, "pcap_sendpacket");

  if(pcap_findalldevs == NULL || pcap_open_live  == NULL ||
     pcap_next_ex     == NULL || pcap_sendpacket == NULL) {
    error_exit("error on access to winpcap library\n");
  }

  init_pcap(addr);
  set_ethaddr(addr);

}
Beispiel #4
0
/*---------------------------------------------------------------------------*/
static void
init_pcap(struct in_addr addr)
{
    struct pcap_if *interfaces;
    struct pcap_addr *paddr;
    char error[256];

    if(pcap_findalldevs(&interfaces, error) == -1) {
        error_exit(error);
    }

    while(interfaces != NULL) {
        log_message("init_pcap: found interface: ", interfaces->description);

        if(interfaces->addresses != NULL) {
            for(paddr = interfaces->addresses;
                    paddr != NULL;
                    paddr = paddr->next) {
                if(paddr->addr != NULL && paddr->addr->sa_family == AF_INET) {
                    struct in_addr interface_addr;
                    interface_addr = ((struct sockaddr_in *)paddr->addr)->sin_addr;
                    log_message("init_pcap:    with address: ", inet_ntoa(interface_addr));

                    if(interface_addr.s_addr == addr.s_addr) {
                        pcap = pcap_open_live(interfaces->name, UIP_BUFSIZE, 0, -1, error);
                        if(pcap == NULL) {
                            error_exit(error);
                        }
#ifdef UIP_FALLBACK_INTERFACE
                        log_message("init_pcap:      Opened as primary interface","");
#endif
//          pcap_setdirection(PCAP_D_IN);  //Not implemented in windows yet?
                        set_ethaddr(addr);

#ifdef UIP_FALLBACK_INTERFACE
                    }
                    if (pfall && pcap) return;
                    if(interface_addr.s_addr == addrfall.s_addr) {
                        pfall = pcap_open_live(interfaces->name, UIP_BUFSIZE, 0, -1, error);
                        if(pfall == NULL) {
                            error_exit(error);
                        }
                        log_message("init_pcap:      Opened as fallback interface","");
                        if (pcap) return;
                    }
#else
                        return;
                    }
#endif

#if UIP_CONF_IPV6

                }
                else if(paddr->addr != NULL && paddr->addr->sa_family == AF_INET6) {
                    struct in6_addr interface_addr;
                    interface_addr = ((struct sockaddr_in6 *)paddr->addr)->sin6_addr;

                    sprint_ip6addr(interface_addr, addr6str);
                    log_message("init_pcap:    with ipv6 address: ", addr6str);

                    if (issame_ip6addr(interface_addr, addr6)) {
                        pcap = pcap_open_live(interfaces->name, UIP_BUFSIZE, 0, -1, error);
                        if(pcap == NULL) {
                            error_exit(error);
                        }
#ifdef UIP_FALLBACK_INTERFACE
                        log_message("init_pcap:      Opened as primary interface","");
#endif
                        set_ethaddr6(addr6);
//          pcap_setdirection(PCAP_D_IN);  //Not implemented in windows yet?
#ifdef UIP_FALLBACK_INTERFACE
                    }
                    if (pfall && pcap) return;  //exit when we have both interfaces

                    if (issame_ip6addr(interface_addr, addrfall6)) {
                        pfall = pcap_open_live(interfaces->name, UIP_BUFSIZE, 0, -1, error);
                        if(pfall == NULL) {
                            error_exit(error);
                        }
                        log_message("init_pcap:      Opened as fallback interface","");
                        if (pcap) return;
                    }
#else
                        return;
                    }
#endif
#endif /* UIP_CONF_IPV6 */
                }
            }