1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# llmnrd - Link-Local Multicast Resolution Daemon
[![Build Status](https://travis-ci.org/tklauser/llmnrd.svg?branch=master)](https://travis-ci.org/tklauser/llmnrd)
[![Coverity Status](https://scan.coverity.com/projects/8697/badge.svg)](https://scan.coverity.com/projects/tklauser-llmnrd)
llmnrd is a daemon implementing the Link-Local Multicast Name Resolution (LLMNR)
protocol according to [RFC 4795](https://tools.ietf.org/html/rfc4795). It
currently only supports Linux, as it uses the
[netlink kernel interface](http://man7.org/linux/man-pages/man7/netlink.7.html).
llmnrd will respond to name resolution queries sent by Windows clients in
networks where no DNS server is available. It supports both IPv4 and IPv6.
Installation
============
To build and install llmnrd use the following commands:
```
$ make
$ sudo make install
```
By default, the llmnrd binary will be installed to /usr/local/sbin. To install
the binary to a different installation path, use:
```
$ make
$ sudo make prefix=<path> install
```
Cross-Compilation
=================
To cross-compile llmnrd for a different architecture, use the `CROSS_COMPILE`
make variable. To e.g. build it using the arm-linux-gnueabihf toolchain use:
```
$ make CROSS_COMPILE=arm-linux-gnueabihf-
```
When cross-compiling, you usually don't want to install the generated binary to
your root filesystem, but to the sysroot of a cross-compiled system. Use the
`DESTDIR` variable to change the installation destination path, e.g.
```
$ make DESTDIR=$HOME/sysroot/ prefix=/usr install
```
Usage
=====
To run llmnrd in the default mode (listening on UDP port 5355):
```
$ llmnrd
```
By default, LLMNR name resolution is only possible over IPv4. To additionally
enable LLMNR name resolution over IPv6 use:
```
$ llmnrd -6
```
Use `llmnrd --help` to show additional usage information.
Additionally, the `llmnr-query` utility is shipped together with llmnrd and
can be used to send customized LLMNR queries:
```
$ llmnr-query <hostname>
```
Use `llmnr-query --help` to show additional usage information.
License
=======
llmnrd is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
llmnrd is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
Please see the [COPYING](https://github.com/tklauser/llmnrd/blob/master/COPYING)
file for the full license text.
Contributors
============
llmnrd is authored and maintained by Tobias Klauser <tklauser@distanz.ch>
The following people contributed patches and ideas, found and reported bugs or
otherwise helped in the development of llmnrd:
* Elazar Leibovich (@elazarl)
* Martin Hauke
* Michael Evertz (@dvl-mevertz)
* Pali Rohár
* @Schimmelreiter
* @svimik
* @tbetker
Thanks a lot!
References
==========
* [RFC 4795](https://tools.ietf.org/html/rfc4795)
* [Microsoft TechNet article about LLMNR](https://technet.microsoft.com/en-us/library/bb878128.aspx)
* [xllmnrd: An IPv6-only LLMNR responder daemon](http://www.vx68k.org/xllmnrd) ([Repository](https://bitbucket.org/kazssym/xllmnrd/))
|