wlantest: Ethernet interface capture
Allow option (command line argument -e) to capture Ethernet headers instead of IEEE 802.11 so that wlantest can be used as a replacement for tcpdump/dumpcap for capturing. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
4415da686d
commit
420989085d
4 changed files with 20 additions and 9 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Received frame processing
|
* Received frame processing
|
||||||
* Copyright (c) 2010, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2010-2019, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -278,6 +278,9 @@ void wlantest_process(struct wlantest *wt, const u8 *data, size_t len)
|
||||||
const u8 *frame, *fcspos;
|
const u8 *frame, *fcspos;
|
||||||
size_t frame_len;
|
size_t frame_len;
|
||||||
|
|
||||||
|
if (wt->ethernet)
|
||||||
|
return;
|
||||||
|
|
||||||
wpa_hexdump(MSG_EXCESSIVE, "Process data", data, len);
|
wpa_hexdump(MSG_EXCESSIVE, "Process data", data, len);
|
||||||
|
|
||||||
if (ieee80211_radiotap_iterator_init(&iter, (void *) data, len, NULL)) {
|
if (ieee80211_radiotap_iterator_init(&iter, (void *) data, len, NULL)) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* wlantest - IEEE 802.11 protocol monitoring and testing tool
|
* wlantest - IEEE 802.11 protocol monitoring and testing tool
|
||||||
* Copyright (c) 2010-2015, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2010-2019, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -21,7 +21,7 @@ static void wlantest_terminate(int sig, void *signal_ctx)
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
printf("wlantest [-cddhqqFNt] [-i<ifname>] [-r<pcap file>] "
|
printf("wlantest [-cddehqqFNt] [-i<ifname>] [-r<pcap file>] "
|
||||||
"[-p<passphrase>]\n"
|
"[-p<passphrase>]\n"
|
||||||
" [-I<wired ifname>] [-R<wired pcap file>] "
|
" [-I<wired ifname>] [-R<wired pcap file>] "
|
||||||
"[-P<RADIUS shared secret>]\n"
|
"[-P<RADIUS shared secret>]\n"
|
||||||
|
@ -367,7 +367,7 @@ int main(int argc, char *argv[])
|
||||||
wlantest_init(&wt);
|
wlantest_init(&wt);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv, "cdf:Fhi:I:L:n:Np:P:qr:R:tT:w:W:");
|
c = getopt(argc, argv, "cdef:Fhi:I:L:n:Np:P:qr:R:tT:w:W:");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -378,6 +378,9 @@ int main(int argc, char *argv[])
|
||||||
if (wpa_debug_level > 0)
|
if (wpa_debug_level > 0)
|
||||||
wpa_debug_level--;
|
wpa_debug_level--;
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
wt.ethernet = 1;
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
if (add_pmk_file(&wt, optarg) < 0)
|
if (add_pmk_file(&wt, optarg) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* wlantest - IEEE 802.11 protocol monitoring and testing tool
|
* wlantest - IEEE 802.11 protocol monitoring and testing tool
|
||||||
* Copyright (c) 2010-2013, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2010-2019, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -208,6 +208,7 @@ struct wlantest {
|
||||||
|
|
||||||
unsigned int assume_fcs:1;
|
unsigned int assume_fcs:1;
|
||||||
unsigned int pcap_no_buffer:1;
|
unsigned int pcap_no_buffer:1;
|
||||||
|
unsigned int ethernet:1;
|
||||||
|
|
||||||
char *notes[MAX_NOTES];
|
char *notes[MAX_NOTES];
|
||||||
size_t num_notes;
|
size_t num_notes;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* PCAP capture file writer
|
* PCAP capture file writer
|
||||||
* Copyright (c) 2010, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2010-2019, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -17,7 +17,9 @@
|
||||||
|
|
||||||
int write_pcap_init(struct wlantest *wt, const char *fname)
|
int write_pcap_init(struct wlantest *wt, const char *fname)
|
||||||
{
|
{
|
||||||
wt->write_pcap = pcap_open_dead(DLT_IEEE802_11_RADIO, 4000);
|
int linktype = wt->ethernet ? DLT_EN10MB : DLT_IEEE802_11_RADIO;
|
||||||
|
|
||||||
|
wt->write_pcap = pcap_open_dead(linktype, 4000);
|
||||||
if (wt->write_pcap == NULL)
|
if (wt->write_pcap == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
wt->write_pcap_dumper = pcap_dump_open(wt->write_pcap, fname);
|
wt->write_pcap_dumper = pcap_dump_open(wt->write_pcap, fname);
|
||||||
|
@ -182,7 +184,7 @@ int write_pcapng_init(struct wlantest *wt, const char *fname)
|
||||||
desc.block_type = PCAPNG_BLOCK_IFACE_DESC;
|
desc.block_type = PCAPNG_BLOCK_IFACE_DESC;
|
||||||
desc.block_total_len = sizeof(desc);
|
desc.block_total_len = sizeof(desc);
|
||||||
desc.block_total_len2 = desc.block_total_len;
|
desc.block_total_len2 = desc.block_total_len;
|
||||||
desc.link_type = LINKTYPE_IEEE802_11_RADIO;
|
desc.link_type = wt->ethernet ? DLT_EN10MB : LINKTYPE_IEEE802_11_RADIO;
|
||||||
desc.snap_len = 65535;
|
desc.snap_len = 65535;
|
||||||
fwrite(&desc, sizeof(desc), 1, wt->pcapng);
|
fwrite(&desc, sizeof(desc), 1, wt->pcapng);
|
||||||
if (wt->pcap_no_buffer)
|
if (wt->pcap_no_buffer)
|
||||||
|
@ -317,6 +319,7 @@ void write_pcapng_write_read(struct wlantest *wt, int dlt,
|
||||||
pos = (u8 *) (pkt + 1);
|
pos = (u8 *) (pkt + 1);
|
||||||
|
|
||||||
switch (dlt) {
|
switch (dlt) {
|
||||||
|
case DLT_EN10MB:
|
||||||
case DLT_IEEE802_11_RADIO:
|
case DLT_IEEE802_11_RADIO:
|
||||||
break;
|
break;
|
||||||
case DLT_PRISM_HEADER:
|
case DLT_PRISM_HEADER:
|
||||||
|
@ -365,5 +368,6 @@ void write_pcapng_captured(struct wlantest *wt, const u8 *buf, size_t len)
|
||||||
gettimeofday(&h.ts, NULL);
|
gettimeofday(&h.ts, NULL);
|
||||||
h.caplen = len;
|
h.caplen = len;
|
||||||
h.len = len;
|
h.len = len;
|
||||||
write_pcapng_write_read(wt, DLT_IEEE802_11_RADIO, &h, buf);
|
write_pcapng_write_read(wt, wt->ethernet ? DLT_EN10MB :
|
||||||
|
DLT_IEEE802_11_RADIO, &h, buf);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue