[tcpdump-workers] Adding loopback adapter detection for Windows

Yang Luo hsluoyb at gmail.com
Sun Jan 24 22:52:34 EST 2016


On Mon, Jan 25, 2016 at 3:10 AM, Guy Harris <guy at alum.mit.edu> wrote:

> 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:
>

I used the release 1.7.4 because I thought it would be stable.


>
> > 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.
>

It seems that the trunk is better than the 1.7.4 release, at least the
former doesn't have something like Adapter.


>
> 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.
>

Good. Is there some official guideline about how to build libpcap (or try
to port) on Windows, or how to use CMAKE on libpcap?


>
> > 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?).
>
>

Cheers,
Yang


More information about the tcpdump-workers mailing list