wlantest: Allow MSK/PMK list to be read from a text file
A text file with MSK/PMK entries (one key per line in hexdump format) can be read into wlantest (-f<path to file>) to initialize list of known PMKs. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
c3f4278445
commit
219fd441fd
1 changed files with 42 additions and 3 deletions
|
@ -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, Jouni Malinen <j@w1.fi>
|
* Copyright (c) 2010-2011, Jouni Malinen <j@w1.fi>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
@ -35,7 +35,7 @@ static void usage(void)
|
||||||
"[-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"
|
||||||
" [-w<write pcap file>]\n");
|
" [-w<write pcap file>] [-f<MSK/PMK file>]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,6 +136,41 @@ static void add_secret(struct wlantest *wt, const char *secret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int add_pmk_file(struct wlantest *wt, const char *pmk_file)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
u8 pmk[32];
|
||||||
|
char buf[300], *pos;
|
||||||
|
struct wlantest_pmk *p;
|
||||||
|
|
||||||
|
f = fopen(pmk_file, "r");
|
||||||
|
if (f == NULL) {
|
||||||
|
wpa_printf(MSG_ERROR, "Could not open '%s'", pmk_file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fgets(buf, sizeof(buf), f)) {
|
||||||
|
pos = buf;
|
||||||
|
while (*pos && *pos != '\r' && *pos != '\n')
|
||||||
|
pos++;
|
||||||
|
*pos = '\0';
|
||||||
|
if (pos - buf < 2 * 32)
|
||||||
|
continue;
|
||||||
|
if (hexstr2bin(buf, pmk, 32) < 0)
|
||||||
|
continue;
|
||||||
|
p = os_zalloc(sizeof(*p));
|
||||||
|
if (p == NULL)
|
||||||
|
break;
|
||||||
|
os_memcpy(p->pmk, pmk, 32);
|
||||||
|
dl_list_add(&wt->pmk, &p->list);
|
||||||
|
wpa_hexdump(MSG_DEBUG, "Added PMK from file", pmk, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int add_wep(struct wlantest *wt, const char *key)
|
int add_wep(struct wlantest *wt, const char *key)
|
||||||
{
|
{
|
||||||
struct wlantest_wep *w;
|
struct wlantest_wep *w;
|
||||||
|
@ -179,7 +214,7 @@ int main(int argc, char *argv[])
|
||||||
wlantest_init(&wt);
|
wlantest_init(&wt);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv, "cdhi:I:p:P:qr:R:w:W:");
|
c = getopt(argc, argv, "cdf:hi:I:p:P:qr:R:w:W:");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -190,6 +225,10 @@ 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 'f':
|
||||||
|
if (add_pmk_file(&wt, optarg) < 0)
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
usage();
|
usage();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue