Ошибка линкера при роботе с WinPCap

Тема в разделе "WASM.BEGINNERS", создана пользователем FullZer0, 9 сен 2010.

  1. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    В общем пробую работать с WinPCap - при компиляции программы выскакивает ошибка линковки.....
    Код:
    Код (Text):
    1. // ObtAdvancedInfoAboutDevs.cpp: определяет точку входа для консольного приложения.
    2. //
    3.  
    4. #include "stdafx.h"
    5. #include <pcap.h>
    6.  
    7. #pragma comment (lib, "wpcap.lib")
    8.  
    9. #ifndef WIN32
    10.     #include <sys/socket.h>
    11.     #include <netinet/in.h>
    12. #else
    13.     #include <winsock.h>
    14. #endif
    15.  
    16. void ifprint(pcap_if_t *dev);
    17. char *iptos(u_long in);
    18. char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);
    19.  
    20.  
    21. int _tmain(int argc, _TCHAR* argv[])
    22. {
    23.     pcap_if_t *alldevs;
    24.     pcap_if_t *onedev;
    25.     char errbuff[PCAP_ERRBUF_SIZE + 1];
    26.     char sources[PCAP_ERRBUF_SIZE + 1];
    27.  
    28.     printf("Enter the device you want to list:\n"
    29.             "rpcap://              ==> lists interfaces in the local machine\n"
    30.             "rpcap://hostname:port ==> lists interfaces in a remote machine\n"
    31.             "                          (rpcapd daemon must be up and running\n"
    32.             "                           and it must accept 'null' authentication)\n"
    33.             "file://foldername     ==> lists all pcap files in the give folder\n\n"
    34.             "Enter your choice: ");
    35.  
    36.     fgets(sources, PCAP_ERRBUF_SIZE, stdin);
    37.     sources[PCAP_ERRBUF_SIZE] = '\0';
    38.  
    39.     if( pcap_findalldevs(&alldevs, errbuff) == -1 ){
    40.         fprintf(stderr, "Error in pcap_findalldevs(): %s\n", errbuff);
    41.         exit(1);
    42.     }
    43.  
    44.     for( onedev = alldevs; onedev; onedev = onedev->next ){
    45.         ifprint(onedev);
    46.     }
    47.  
    48.     pcap_freealldevs(alldevs);
    49.  
    50.     return 1;
    51. }
    52.  
    53. void ifprint(pcap_if_t *onedev){
    54.     pcap_addr_t *a;
    55.     char ip6str[128];
    56.  
    57.     printf("Name: %s\n", onedev->name);
    58.  
    59.     if( onedev->description )
    60.         printf("Description: %s\n", onedev->description);
    61.  
    62.     printf("Loopcack: %s\n", (onedev->flags & PCAP_IF_LOOPBACK) ? "yes" : "no");
    63.  
    64.     for( a = onedev->addresses; a; a = a->next ){
    65.         printf("Addr Family: #%d\n", a->addr->sa_family);
    66.  
    67.          switch(a->addr->sa_family){
    68.             case AF_INET:
    69.                 printf("\tAddress Family Name: AF_INET\n");
    70.                 if (a->addr)
    71.                     printf("\tAddress: %s\n",
    72.                             iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
    73.                 if (a->netmask)
    74.                     printf("\tNetmask: %s\n",
    75.                             iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
    76.                 if (a->broadaddr)
    77.                     printf("\tBroadcast Address: %s\n",
    78.                             iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
    79.                 if (a->dstaddr)
    80.                     printf("\tDestination Address: %s\n",
    81.                             iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
    82.             break;
    83.  
    84.             case AF_INET6:
    85.                 printf("\tAddress Family Name: AF_INET6\n");
    86.                 if (a->addr)
    87.                     printf("\tAddress: %s\n",
    88.                             ip6tos(a->addr, ip6str, sizeof(ip6str)));
    89.             break;
    90.  
    91.             default:
    92.                 printf("\tAddress Family Name: Unknown\n");
    93.             break;
    94.         }
    95.     }
    96.     printf("\n");
    97. }
    98.  
    99. #define IPTOSBUFFERS    12
    100.  
    101. char *iptos(u_long in){
    102.     static char output[IPTOSBUFFERS][3*4+3+1];
    103.     static short which;
    104.     u_char *p;
    105.  
    106.     p = (u_char *)&in;
    107.     which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
    108.     sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
    109.     return output[which];
    110. }
    111.  
    112.  
    113. char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen){
    114.     socklen_t sockaddrlen;
    115.  
    116.     #ifdef WIN32
    117.         sockaddrlen = sizeof(struct sockaddr_in6);
    118.     #else
    119.         sockaddrlen = sizeof(struct sockaddr_storage);
    120.     #endif
    121.  
    122.         if( GetNameInfoA(sockaddr,
    123.                          sockaddrlen,
    124.                          address,
    125.                          addrlen,
    126.                          NULL,
    127.                          0,
    128.                          NI_NUMERICHOST) != 0) address = NULL;
    129.  return address;
    130. }
    Текст ошибки:
    Код (Text):
    1. Ошибка    2   error LNK2019: ссылка на неразрешенный внешний символ __imp__getnameinfo@28 в функции "char * __cdecl ip6tos(struct sockaddr *,char *,int)" (?ip6tos@@YAPADPAUsockaddr@@PADH@Z)   C:\Documents and Settings\Admin\мои документы\visual studio 2010\Projects\ObtAdvancedInfoAboutDevs\ObtAdvancedInfoAboutDevs\ObtAdvancedInfoAboutDevs.obj
    2.  
    3. Ошибка    3   error LNK1120: 1 неразрешенных внешних элементов   C:\Documents and Settings\Admin\мои документы\visual studio 2010\Projects\ObtAdvancedInfoAboutDevs\Debug\ObtAdvancedInfoAboutDevs.exe   1
    Вроде lib файл прилинковал, возможно что то упустил ! Подскажите в чем проблема !
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    а Ws2_32.lib добавил в проект ?
     
  3. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    Нет, но уже добавил - проблема решена. Спасибо!

    З.Ы.
    Странно но что то я про эту либу упустил материал .... =(
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    тебе подсказка была: