scientist2009 / mentohust

Automatically exported from code.google.com/p/mentohust
1 stars 0 forks source link

[BugReport]mentohust无法正确列举当前网卡个数 #80

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
请看:

** 网卡[1]:   eth0
** 网卡[2]:   wlan0
** 网卡[3]:   vboxnet0
** 网卡[4]:   pan0
** 网卡[5]:   wlan0:avahi
** 网卡[6]:   vboxnet0:avahi
** 网卡[7]:   pan0:avahi
** 网卡[8]:   usbmon1
** 网卡[9]:   usbmon2
** 网卡[10]:  usbmon3
** 网卡[11]:  usbmon4
** 网卡[12]:  usbmon5
** 网卡[13]:  usbmon6
** 网卡[14]:  usbmon7
** 网卡[15]:  usbmon8
?? 请选择网卡[1-17]: 1
** 您选择了第[1]块网卡。

一共15个让选择的是1-17

** 网卡[1]:   eth0
** 网卡[2]:   wlan0
** 网卡[3]:   vboxnet0
** 网卡[4]:   pan0
** 网卡[5]:   usbmon1
** 网卡[6]:   usbmon2
** 网卡[7]:   usbmon3
** 网卡[8]:   usbmon4
** 网卡[9]:   usbmon5
** 网卡[10]:  usbmon6
** 网卡[11]:  usbmon7
** 网卡[12]:  usbmon8
?? 请选择网卡[1-14]: 16
** 您选择了第[14]块网卡。

写的是16 ,说我选择的是14 ,可是列举只到了12 

源码对应的函数
static int getAdapter()
{
    pcap_if_t *alldevs, *d;
    int num = 0, avail = 0, i;
    char errbuf[PCAP_ERRBUF_SIZE];
    if (pcap_findalldevs(&alldevs, errbuf)==-1 || alldevs==NULL)
    {
        printf("!! 查找网卡失败: %s\n", errbuf);
        return -1;
    }
    for (d=alldevs; d!=NULL; d=d->next)
    {
        num++;
        if (!(d->flags & PCAP_IF_LOOPBACK) && strcmp(d->name, "any")!=0)
        {
            printf("** 网卡[%d]:\t%s\n", num, d->name);
            avail++;
            i = num;
        }
    }
    if (avail == 0)
    {
        pcap_freealldevs(alldevs);
        printf("!! 找不到网卡!\n");
        return -1;
    }
    if (avail > 1)
    {
        printf("?? 请选择网卡[1-%d]: ", num);
        scanf("%d", &i);
        if (i < 1)
            i = 1;
        else if (i > num)
            i = num;
    }
    printf("** 您选择了第[%d]块网卡。\n", i);
    for (d=alldevs; i>1; d=d->next, i--);
    strncpy(nic, d->name, sizeof(nic)-1);
    pcap_freealldevs(alldevs);
    return 0;
}

这个错误应该是由于num++的位置,如下修改则可以正确。
    for (d=alldevs; d!=NULL; d=d->next)
    {

        if (!(d->flags & PCAP_IF_LOOPBACK) && strcmp(d->name, "any")!=0)
        {
                        num++;
            printf("** 网卡[%d]:\t%s\n", num, d->name);
            avail++;
            i = num;
        }
    }

当然,如果另有它用,可能就是不Bug,只不过我还没有明白~

Original issue reported on code.google.com by chinache...@gmail.com on 2 Dec 2010 at 1:12

Attachments:

GoogleCodeExporter commented 9 years ago
感谢您对Bug进行提交,会尽快处理。

Original comment by kuunw...@gmail.com on 10 Dec 2010 at 12:17

GoogleCodeExporter commented 9 years ago

Original comment by www.eh...@gmail.com on 21 May 2011 at 10:42