diff options
-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; |