[tcpdump-workers] Adding loopback adapter detection for Windows
Guy Harris
guy at alum.mit.edu
Sun Jan 24 14:10:34 EST 2016
On Jan 24, 2016, at 8:30 AM, Yang Luo <hsluoyb at gmail.com> wrote:
> I forgot about one most important thing that libpcap seemingly doesn't
> compile under Windows, even if there's a Win32\Prj in it. Actually I got
> many errors when I build libpcap under VS2005.
>
> I am quite confused with some lines like this in pcap-int.h:
The current version of libpcap's pcap-int.h doesn't look like:
> typedef int (*activate_op_t)(pcap_t *);
> typedef int (*can_set_rfmon_op_t)(pcap_t *);
> typedef int (*read_op_t)(pcap_t *, int cnt, pcap_handler, u_char *);
> typedef int (*inject_op_t)(pcap_t *, const void *, size_t);
> typedef int (*setfilter_op_t)(pcap_t *, struct bpf_program *);
> typedef int (*setdirection_op_t)(pcap_t *, pcap_direction_t);
> typedef int (*set_datalink_op_t)(pcap_t *, int);
> typedef int (*getnonblock_op_t)(pcap_t *, char *);
> typedef int (*setnonblock_op_t)(pcap_t *, int, char *);
> typedef int (*stats_op_t)(pcap_t *, struct pcap_stat *);
> #ifdef WIN32
> typedef int (*setbuff_op_t)(pcap_t *, int);
> typedef int (*setmode_op_t)(pcap_t *, int);
> typedef int (*setmintocopy_op_t)(pcap_t *, int);
> typedef Adapter *(*getadapter_op_t)(pcap_t *);
> #endif
> typedef void (*cleanup_op_t)(pcap_t *);
it looks like:
typedef int (*activate_op_t)(pcap_t *);
typedef int (*can_set_rfmon_op_t)(pcap_t *);
typedef int (*read_op_t)(pcap_t *, int cnt, pcap_handler, u_char *);
typedef int (*inject_op_t)(pcap_t *, const void *, size_t);
typedef int (*setfilter_op_t)(pcap_t *, struct bpf_program *);
typedef int (*setdirection_op_t)(pcap_t *, pcap_direction_t);
typedef int (*set_datalink_op_t)(pcap_t *, int);
typedef int (*getnonblock_op_t)(pcap_t *, char *);
typedef int (*setnonblock_op_t)(pcap_t *, int, char *);
typedef int (*stats_op_t)(pcap_t *, struct pcap_stat *);
#ifdef _WIN32
typedef struct pcap_stat *(*stats_ex_op_t)(pcap_t *, int *);
typedef int (*setbuff_op_t)(pcap_t *, int);
typedef int (*setmode_op_t)(pcap_t *, int);
typedef int (*setmintocopy_op_t)(pcap_t *, int);
typedef HANDLE (*getevent_op_t)(pcap_t *);
typedef int (*oid_get_request_op_t)(pcap_t *, bpf_u_int32, void *, size_t);
typedef int (*oid_set_request_op_t)(pcap_t *, bpf_u_int32, const void *, size_t);
typedef u_int (*sendqueue_transmit_op_t)(pcap_t *, pcap_send_queue *, int);
typedef int (*setuserbuffer_op_t)(pcap_t *, int);
typedef int (*live_dump_op_t)(pcap_t *, char *, int, int);
typedef int (*live_dump_ended_op_t)(pcap_t *, int);
typedef PAirpcapHandle (*get_airpcap_handle_op_t)(pcap_t *);
#endif
typedef void (*cleanup_op_t)(pcap_t *);
which, among other things, doesn't use "Adapter" at all.
And, speaking of Win32\Prj, that's now deprecated - get CMake:
https://cmake.org
and use that. autotools are also supported (and are the main build mechanisms supported) on UN*X, but the old Windows projects aren't being kept up-to-date.
> It seems that libpcap has considered Windows as there's WIN32 macro, but
> Adapter is not defined as VS2005 error shows.
You should use the *current* version of libpcap, not whatever older version you're using (the one that comes with WinPcap?).
More information about the tcpdump-workers
mailing list