亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pcap-dos.c

?? Ubuntu packages of security software。 相當(dāng)不錯的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  This file is part of DOS-libpcap *  Ported to DOS/DOSX by G. Vanem <giva@bgnett.no> * *  pcap-dos.c: Interface to PKTDRVR, NDIS2 and 32-bit pmode *              network drivers. * * @(#) $Header: /tcpdump/master/libpcap/pcap-dos.c,v 1.1.2.1 2005/05/03 18:54:35 guy Exp $ (LBL) */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <float.h>#include <fcntl.h>#include <io.h>#if defined(USE_32BIT_DRIVERS)  #include "msdos/pm_drvr/pmdrvr.h"  #include "msdos/pm_drvr/pci.h"  #include "msdos/pm_drvr/bios32.h"  #include "msdos/pm_drvr/module.h"  #include "msdos/pm_drvr/3c501.h"  #include "msdos/pm_drvr/3c503.h"  #include "msdos/pm_drvr/3c509.h"  #include "msdos/pm_drvr/3c59x.h"  #include "msdos/pm_drvr/3c515.h"  #include "msdos/pm_drvr/3c90x.h"  #include "msdos/pm_drvr/3c575_cb.h"  #include "msdos/pm_drvr/ne.h"  #include "msdos/pm_drvr/wd.h"  #include "msdos/pm_drvr/accton.h"  #include "msdos/pm_drvr/cs89x0.h"  #include "msdos/pm_drvr/rtl8139.h"  #include "msdos/pm_drvr/ne2k-pci.h"#endif#include "pcap.h"#include "pcap-dos.h"#include "pcap-int.h"#include "msdos/pktdrvr.h"#ifdef USE_NDIS2#include "msdos/ndis2.h"#endif#include <arpa/inet.h>#include <net/if.h>#include <net/if_arp.h>#include <net/if_ether.h>#include <net/if_packe.h>#include <tcp.h>#if defined(USE_32BIT_DRIVERS)  #define FLUSHK()       do { _printk_safe = 1; _printk_flush(); } while (0)  #define NDIS_NEXT_DEV  &rtl8139_dev  static char *rx_pool = NULL;  static void init_32bit (void);  static int  pktq_init     (struct rx_ringbuf *q, int size, int num, char *pool);  static int  pktq_check    (struct rx_ringbuf *q);  static int  pktq_inc_out  (struct rx_ringbuf *q);  static int  pktq_in_index (struct rx_ringbuf *q) LOCKED_FUNC;  static void pktq_clear    (struct rx_ringbuf *q) LOCKED_FUNC;  static struct rx_elem *pktq_in_elem  (struct rx_ringbuf *q) LOCKED_FUNC;  static struct rx_elem *pktq_out_elem (struct rx_ringbuf *q);#else  #define FLUSHK()      ((void)0)  #define NDIS_NEXT_DEV  NULL#endif/* * Internal variables/functions in Watt-32 */extern WORD  _pktdevclass;extern BOOL  _eth_is_init;extern int   _w32_dynamic_host;extern int   _watt_do_exit;extern int   _watt_is_init;extern int   _w32__bootp_on, _w32__dhcp_on, _w32__rarp_on, _w32__do_mask_req;extern void (*_w32_usr_post_init) (void);extern void (*_w32_print_hook)();extern void dbug_write (const char *);  /* Watt-32 lib, pcdbug.c */extern int  pkt_get_mtu (void);static int ref_count = 0;static u_long mac_count    = 0;static u_long filter_count = 0;static volatile BOOL exc_occured = 0;static struct device *handle_to_device [20];static int  pcap_read_dos (pcap_t *p, int cnt, pcap_handler callback,                           u_char *data);static void pcap_close_dos (pcap_t *p);static int  pcap_stats_dos (pcap_t *p, struct pcap_stat *ps);static int  pcap_sendpacket_dos (pcap_t *p, const void *buf, size_t len);static int  pcap_setfilter_dos (pcap_t *p, struct bpf_program *fp);static int  ndis_probe (struct device *dev);static int  pkt_probe  (struct device *dev);static void close_driver (void);static int  init_watt32 (struct pcap *pcap, const char *dev_name, char *err_buf);static int  first_init (const char *name, char *ebuf, int promisc);static void watt32_recv_hook (u_char *dummy, const struct pcap_pkthdr *pcap,                              const u_char *buf);/* * These are the device we always support */static struct device ndis_dev = {              "ndis",              "NDIS2 LanManager",              0,              0,0,0,0,0,0,              NDIS_NEXT_DEV,  /* NULL or a 32-bit device */              ndis_probe            };static struct device pkt_dev = {              "pkt",              "Packet-Driver",              0,              0,0,0,0,0,0,              &ndis_dev,              pkt_probe            };static struct device *get_device (int fd){  if (fd <= 0 || fd >= sizeof(handle_to_device)/sizeof(handle_to_device[0]))     return (NULL);  return handle_to_device [fd-1];}/* * Open MAC-driver with name 'device_name' for live capture of * network packets. */pcap_t *pcap_open_live (const char *device_name, int snaplen, int promisc,                        int timeout_ms, char *errbuf){   struct pcap *pcap;  if (snaplen < ETH_MIN)      snaplen = ETH_MIN;  if (snaplen > ETH_MAX)   /* silently accept and truncate large MTUs */      snaplen = ETH_MAX;  pcap = calloc (sizeof(*pcap), 1);  if (!pcap)  {    strcpy (errbuf, "Not enough memory (pcap)");    return (NULL);  }  pcap->snapshot          = max (ETH_MIN+8, snaplen);  pcap->linktype          = DLT_EN10MB;  /* !! */  pcap->inter_packet_wait = timeout_ms;  pcap->close_op          = pcap_close_dos;  pcap->read_op           = pcap_read_dos;  pcap->stats_op          = pcap_stats_dos;  pcap->inject_op         = pcap_sendpacket_dos;  pcap->setfilter_op      = pcap_setfilter_dos;	pcap->setdirection_op   = NULL; /* Not implemented.*/  pcap->fd                = ++ref_count;  if (pcap->fd == 1)  /* first time we're called */  {    if (!init_watt32(pcap, device_name, errbuf) ||        !first_init(device_name, errbuf, promisc))    {      free (pcap);      return (NULL);    }     atexit (close_driver);  }  else if (stricmp(active_dev->name,device_name))  {    snprintf (errbuf, PCAP_ERRBUF_SIZE,              "Cannot use different devices simultaneously "              "(`%s' vs. `%s')", active_dev->name, device_name);    free (pcap);    pcap = NULL;  }  handle_to_device [pcap->fd-1] = active_dev;  return (pcap);}/* * Poll the receiver queue and call the pcap callback-handler * with the packet. */static intpcap_read_one (pcap_t *p, pcap_handler callback, u_char *data){  struct pcap_pkthdr pcap;  struct bpf_insn   *fcode = p->fcode.bf_insns;  struct timeval     now, expiry;  BYTE  *rx_buf;  int    rx_len = 0;  if (p->inter_packet_wait > 0)  {    gettimeofday2 (&now, NULL);    expiry.tv_usec = now.tv_usec + 1000UL * p->inter_packet_wait;    expiry.tv_sec  = now.tv_sec;    while (expiry.tv_usec >= 1000000L)    {      expiry.tv_usec -= 1000000L;      expiry.tv_sec++;    }  }  while (!exc_occured)  {    volatile struct device *dev; /* might be reset by sig_handler */    dev = get_device (p->fd);    if (!dev)       break;    PCAP_ASSERT (dev->copy_rx_buf || dev->peek_rx_buf);    FLUSHK();    /* If driver has a zero-copy receive facility, peek at the queue,     * filter it, do the callback and release the buffer.     */    if (dev->peek_rx_buf)    {      PCAP_ASSERT (dev->release_rx_buf);      rx_len = (*dev->peek_rx_buf) (&rx_buf);    }    else    {      BYTE buf [ETH_MAX+100]; /* add some margin */      rx_len = (*dev->copy_rx_buf) (buf, p->snapshot);      rx_buf = buf;    }    if (rx_len > 0)  /* got a packet */    {      mac_count++;      FLUSHK();      pcap.caplen = min (rx_len, p->snapshot);      pcap.len    = rx_len;      if (callback &&          (!fcode || bpf_filter(fcode, rx_buf, pcap.len, pcap.caplen)))      {        filter_count++;        /* Fix-me!! Should be time of arrival. Not time of         * capture.         */        gettimeofday2 (&pcap.ts, NULL);        (*callback) (data, &pcap, rx_buf);      }      if (dev->release_rx_buf)        (*dev->release_rx_buf) (rx_buf);      if (pcap_pkt_debug > 0)      {        if (callback == watt32_recv_hook)             dbug_write ("pcap_recv_hook\n");        else dbug_write ("pcap_read_op\n");      }      FLUSHK();      return (1);    }    /* If not to wait for a packet or pcap_close() called from     * e.g. SIGINT handler, exit loop now.     */    if (p->inter_packet_wait <= 0 || (volatile int)p->fd <= 0)       break;    gettimeofday2 (&now, NULL);    if (timercmp(&now, &expiry, >))       break;#ifndef DJGPP    kbhit();    /* a real CPU hog */#endif    if (p->wait_proc)      (*p->wait_proc)();     /* call yield func */  }  if (rx_len < 0)            /* receive error */  {    p->md.stat.ps_drop++;#ifdef USE_32BIT_DRIVERS    if (pcap_pkt_debug > 1)       printk ("pkt-err %s\n", pktInfo.error);#endif    return (-1);  }  return (0);}static intpcap_read_dos (pcap_t *p, int cnt, pcap_handler callback, u_char *data){  int rc, num = 0;  while (num <= cnt || (cnt < 0))  {    if (p->fd <= 0)       return (-1);    rc = pcap_read_one (p, callback, data);    if (rc > 0)       num++;    if (rc < 0)       break;    _w32_os_yield();  /* allow SIGINT generation, yield to Win95/NT */  }  return (num);}/* * Return network statistics */static int pcap_stats_dos (pcap_t *p, struct pcap_stat *ps){  struct net_device_stats *stats;  struct device           *dev = p ? get_device(p->fd) : NULL;  if (!dev)  {    strcpy (p->errbuf, "illegal pcap handle");    return (-1);  }  if (!dev->get_stats || (stats = (*dev->get_stats)(dev)) == NULL)  {    strcpy (p->errbuf, "device statistics not available");    return (-1);  }  FLUSHK();  p->md.stat.ps_recv   = stats->rx_packets;  p->md.stat.ps_drop  += stats->rx_missed_errors;  p->md.stat.ps_ifdrop = stats->rx_dropped +  /* queue full */                         stats->rx_errors;    /* HW errors */  if (ps)     *ps = p->md.stat;  return (0);}/* * Return detailed network/device statistics. * May be called after 'dev->close' is called. */int pcap_stats_ex (pcap_t *p, struct pcap_stat_ex *se){  struct device *dev = p ? get_device (p->fd) : NULL;  if (!dev || !dev->get_stats)  {    strlcpy (p->errbuf, "detailed device statistics not available",             PCAP_ERRBUF_SIZE);    return (-1);  }  if (!strnicmp(dev->name,"pkt",3))  {    strlcpy (p->errbuf, "pktdrvr doesn't have detailed statistics",             PCAP_ERRBUF_SIZE);    return (-1);  }               memcpy (se, (*dev->get_stats)(dev), sizeof(*se));  return (0);}/* * Simply store the filter-code for the pcap_read_dos() callback * Some day the filter-code could be handed down to the active * device (pkt_rx1.s or 32-bit device interrupt handler). */static int pcap_setfilter_dos (pcap_t *p, struct bpf_program *fp){  if (!p)     return (-1);  p->fcode = *fp;  return (0);}/* * Return # of packets received in pcap_read_dos() */u_long pcap_mac_packets (void){  return (mac_count);}/* * Return # of packets passed through filter in pcap_read_dos() */u_long pcap_filter_packets (void){  return (filter_count);}/* * Close pcap device. Not called for offline captures. */static void pcap_close_dos (pcap_t *p){  if (p && !exc_occured)  {    if (pcap_stats(p,NULL) < 0)       p->md.stat.ps_drop = 0;    if (!get_device(p->fd))       return;    handle_to_device [p->fd-1] = NULL;    p->fd = 0;    if (ref_count > 0)        ref_count--;    if (ref_count > 0)       return;  }  close_driver();}/* * Return the name of the 1st network interface, * or NULL if none can be found. */char *pcap_lookupdev (char *ebuf){  struct device *dev;#ifdef USE_32BIT_DRIVERS  init_32bit();#endif  for (dev = (struct device*)dev_base; dev; dev = dev->next)  {    PCAP_ASSERT (dev->probe);    if ((*dev->probe)(dev))    {      FLUSHK();      probed_dev = (struct device*) dev; /* remember last probed device */      return (char*) dev->name;    }  }  if (ebuf)     strcpy (ebuf, "No driver found");  return (NULL);}/* * Gets localnet & netmask from Watt-32. */int pcap_lookupnet (const char *device, bpf_u_int32 *localnet,                    bpf_u_int32 *netmask, char *errbuf){  if (!_watt_is_init)  {    strcpy (errbuf, "pcap_open_offline() or pcap_open_live() must be "                    "called first");    return (-1);  }  *netmask  = _w32_sin_mask;  *localnet = my_ip_addr & *netmask;  if (*localnet == 0)  {    if (IN_CLASSA(*netmask))       *localnet = IN_CLASSA_NET;    else if (IN_CLASSB(*netmask))       *localnet = IN_CLASSB_NET;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情图片一区| 国产精品色婷婷| 成人一级黄色片| 久久精品国产成人一区二区三区| 亚洲精品成人精品456| 久久精品夜色噜噜亚洲aⅴ| 欧美肥妇bbw| 欧美日韩一区二区三区四区| 91农村精品一区二区在线| 国产成人av影院| 国产另类ts人妖一区二区| 黄一区二区三区| 国产一区二区伦理片| 另类小说一区二区三区| 久久不见久久见中文字幕免费| 视频一区二区三区入口| 日本一区中文字幕| 美女视频第一区二区三区免费观看网站 | 韩国女主播成人在线| 久久国产三级精品| 国产米奇在线777精品观看| 国产精品一卡二卡在线观看| 国产精品一线二线三线| 国产91精品露脸国语对白| 处破女av一区二区| 91精品免费观看| 欧美日韩国产高清一区二区三区 | 久久久三级国产网站| 国产日韩精品一区| 国产精品视频第一区| 亚洲女人****多毛耸耸8| 一区二区三区在线视频观看58 | 欧美极品少妇xxxxⅹ高跟鞋 | 精品国产亚洲在线| 久久久久国产精品厨房| 中文字幕日本不卡| 天堂久久一区二区三区| 精品亚洲免费视频| 丰满少妇在线播放bd日韩电影| 波多野结衣中文一区| 在线免费观看视频一区| 日韩欧美久久一区| 1区2区3区国产精品| 午夜精品一区二区三区免费视频 | 国产欧美日韩中文久久| 亚洲色图欧洲色图婷婷| 日韩专区一卡二卡| 国产成人精品三级麻豆| 欧美日韩亚洲另类| 久久精品亚洲精品国产欧美kt∨ | 欧美亚洲一区三区| 精品免费国产二区三区| 亚洲人午夜精品天堂一二香蕉| 秋霞午夜av一区二区三区| 成人毛片老司机大片| 欧美日韩国产片| 国产精品久久影院| 美女一区二区在线观看| 99热99精品| 精品福利在线导航| 亚洲一区二区视频在线观看| 欧美日韩国产美| 久久久亚洲综合| 亚洲18女电影在线观看| 成人午夜视频免费看| 欧美一区午夜精品| 亚洲一区二区三区影院| 成人精品视频一区| 精品乱码亚洲一区二区不卡| 亚洲一区免费视频| 99精品视频在线播放观看| 精品乱人伦小说| 日产国产高清一区二区三区| 在线免费不卡视频| 1区2区3区国产精品| 国产高清久久久久| 日韩欧美久久一区| 天天av天天翘天天综合网 | 免费成人在线视频观看| 色综合久久六月婷婷中文字幕| 久久久久一区二区三区四区| 免费国产亚洲视频| 7777精品伊人久久久大香线蕉完整版| 亚洲三级在线免费| 91在线小视频| 中文字幕av免费专区久久| 精彩视频一区二区| 欧美电视剧在线看免费| 香蕉影视欧美成人| 在线观看欧美精品| 亚洲精品久久7777| 在线免费精品视频| 亚洲一区二区偷拍精品| 在线看不卡av| 亚洲综合在线观看视频| 色噜噜夜夜夜综合网| 亚洲欧美另类小说视频| 色呦呦一区二区三区| 亚洲欧美另类小说| 欧美自拍丝袜亚洲| 丝袜亚洲另类欧美| 欧美tickling挠脚心丨vk| 激情综合网最新| 国产欧美视频一区二区三区| av在线综合网| 夜夜爽夜夜爽精品视频| 欧美精品在欧美一区二区少妇| 视频一区二区欧美| 2023国产精品视频| 福利一区福利二区| 亚洲精品福利视频网站| 9191国产精品| 国产在线视频一区二区| 欧美国产日韩在线观看| 色诱亚洲精品久久久久久| 波多野结衣精品在线| 国产精品久久久久久久久搜平片 | 中文字幕一区二区三区四区 | 欧美精品一区二区三区在线| 国产一区二区导航在线播放| 国产精品免费视频观看| 色综合久久99| 另类人妖一区二区av| 国产欧美日韩精品a在线观看| 91首页免费视频| 日本亚洲天堂网| 国产精品女同互慰在线看| 欧美色精品在线视频| 国产一区二区三区免费在线观看| 久久精品一区二区三区不卡| 日本韩国精品在线| 精东粉嫩av免费一区二区三区| 亚洲人妖av一区二区| 制服丝袜亚洲色图| 不卡的电影网站| 免费一区二区视频| 综合久久一区二区三区| 欧美一级高清片在线观看| 97se亚洲国产综合自在线 | 丁香婷婷综合网| 亚洲福利一二三区| 国产精品私人影院| 日韩一级片网址| 色就色 综合激情| 国产不卡免费视频| 日本不卡一二三区黄网| 自拍偷拍亚洲欧美日韩| 精品免费国产二区三区| 欧美性受xxxx黑人xyx| 国产成人自拍网| 久久精品国产99国产精品| 一区二区在线观看av| 国产无一区二区| 日韩精品一区二区三区四区 | 成人综合婷婷国产精品久久免费| 亚洲成av人片| 亚洲男人的天堂一区二区| 久久久久久9999| 日韩一区二区三区观看| 欧美性猛片aaaaaaa做受| 91原创在线视频| 成人丝袜视频网| 国产传媒一区在线| 精品综合免费视频观看| 亚洲成av人片在线观看无码| 亚洲精品大片www| 亚洲欧美视频一区| 国产精品网站在线| 久久久久久久久免费| 亚洲美女屁股眼交| 亚洲欧洲成人自拍| 国产精品卡一卡二| 国产精品九色蝌蚪自拍| 欧美国产欧美综合| 国产蜜臀97一区二区三区| 久久综合狠狠综合| 欧美精品一区二区三区视频| 精品日本一线二线三线不卡| 日韩视频免费观看高清完整版在线观看 | 欧美mv和日韩mv的网站| 91国偷自产一区二区开放时间 | 精品国产sm最大网站免费看| 91麻豆精品91久久久久同性| 欧美日韩亚洲高清一区二区| 欧美日产国产精品| 6080午夜不卡| 精品国产sm最大网站免费看| 久久综合成人精品亚洲另类欧美 | 91论坛在线播放| 97精品国产露脸对白| 色综合天天狠狠| 精品视频一区二区不卡| 777午夜精品视频在线播放| 日韩美女视频在线| 久久色.com| 中文字幕一区av| 亚洲国产毛片aaaaa无费看| 调教+趴+乳夹+国产+精品| 美女在线观看视频一区二区| 国产精品一二一区|