diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2016-08-02 14:00:54 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2016-08-02 14:00:54 +0200 |
commit | a52e1267020bdf9816219b44d1cf1ba717821f64 (patch) | |
tree | 96c0286d14c63761af68ac11d152974797194635 | |
parent | c53e9b86ae702272e5121d3e06d02c9eafacd929 (diff) |
llmnr-query: Allow to set LLMNR transaction id
Allow to override the transaction id in the LLMNR query header. Default
value is 0. The id will be incremented for consecutive queries (i.e.
count > 1).
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r-- | llmnr-query.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llmnr-query.c b/llmnr-query.c index e35a00e..fefcf0b 100644 --- a/llmnr-query.c +++ b/llmnr-query.c @@ -36,9 +36,10 @@ #include "log.h" #include "pkt.h" -static const char *short_ops = "c:i:I:t:T:6hV"; +static const char *short_ops = "c:d:i:I:t:T:6hV"; static const struct option long_opts[] = { { "count", required_argument, NULL, 'c' }, + { "id", required_argument, NULL, 'd' }, { "interval", required_argument, NULL, 'i' }, { "interface", required_argument, NULL, 'I' }, { "timeout", required_argument, NULL, 't' }, @@ -54,6 +55,7 @@ static void __noreturn usage_and_exit(int status) fprintf(stdout, "Usage: llmnr-query [OPTIONS...] NAME\n" "Options:\n" " -c, --count NUM number of queries to send (default: 1)\n" + " -d, --id NUM set LLMNR transaction id (default: 0)\n" " -i, --interval NUM interval between queries in ms (default: 500)\n" " -I, --interface NAME send multicast over specified interface\n" " -t, --timeout NUM time to wait for reply in ms (default: 1000)\n" @@ -92,7 +94,7 @@ int main(int argc, char **argv) int c, sock; const char *query_name, *iface = NULL; size_t query_name_len; - unsigned long i, count = 1, interval_ms = 500, timeout_ms = 1000; + unsigned long i, id = 0, count = 1, interval_ms = 500, timeout_ms = 1000; uint16_t qtype = LLMNR_QTYPE_ANY; bool ipv6 = false; struct pkt *p; @@ -103,6 +105,9 @@ int main(int argc, char **argv) case 'c': count = strtoul(optarg, NULL, 0); break; + case 'd': + id = strtoul(optarg, NULL, 0); + break; case 'i': interval_ms = strtoul(optarg, NULL, 0); break; @@ -217,7 +222,7 @@ int main(int argc, char **argv) int ret; hdr = (struct llmnr_hdr *)pkt_put(p, sizeof(*hdr)); - hdr->id = htons(i % UINT16_MAX); + hdr->id = htons(id + i % UINT16_MAX); hdr->flags = 0; hdr->qdcount = htons(1); hdr->ancount = 0; |