@@ -24,7 +24,7 @@ const (
2424 '-'
2525`
2626
27- Version = 1.0
27+ Version = 1.1
2828 TimeoutSec = 3
2929 BcastAddr = "224.0.0.252"
3030 LLMNRPort = 5355
@@ -37,20 +37,31 @@ var (
3737 // default logger is set to abyss
3838 logger = log .New (ioutil .Discard , "" , 0 )
3939
40+ // default computername to broadcast
41+ computerName = "aweirdcomputername"
42+
4043 // argument flags
4144 jsonPtr = flag .Bool ("json" , false ,
4245 `Prints a JSON to STDOUT if a responder is detected on
43- network. Other text is sent to STDERR` )
46+ network. Other text is sent to STDERR` )
4447
4548 debugPtr = flag .Bool ("debug" , false ,
4649 `Creates a debug.log file with a trace of the program` )
50+
51+ compPtr = flag .String ("computername" , "aweirdcomputername" ,
52+ `Overrides the default computer name` )
53+
4754)
4855
4956func main () {
5057 initFlags ()
5158
5259 fmt .Fprintln (os .Stderr , Banner )
5360
61+ if * compPtr != "aweirdcomputername" {
62+ computerName = * compPtr
63+ }
64+
5465 interfaces , _ := net .Interfaces ()
5566 logger .Println ("======== Starting RESPOUNDER ========" )
5667 logger .Printf ("List of all interfaces: \n %+v\n " , interfaces )
@@ -108,13 +119,13 @@ func sendLLMNRProbe(ip net.IP) string {
108119 responderIP := ""
109120 // 2 byte random transaction id eg. 0x8e53
110121 rand .Seed (time .Now ().UnixNano ())
111- randomTransactionId := fmt .Sprintf ("%04x" , rand .Intn (65535 ))
122+ randomTransactionID := fmt .Sprintf ("%04x" , rand .Intn (65535 ))
123+
124+ cNameLen := fmt .Sprintf ("%2x" , len (computerName ))
125+ encCName := hex .EncodeToString ([]byte (computerName ))
126+
127+ llmnrRequest := randomTransactionID + "00000001000000000000" + cNameLen + encCName + "0000010001"
112128
113- // LLMNR request in raw bytes
114- // TODO: generate a new computer name evertime instead of the
115- // hardcoded value 'awierdcomputername'
116- llmnrRequest := randomTransactionId +
117- "0000000100000000000012617769657264636f6d70757465726e616d650000010001"
118129 n , _ := hex .DecodeString (llmnrRequest )
119130
120131 remoteAddr := net.UDPAddr {IP : net .ParseIP (BcastAddr ), Port : LLMNRPort }
@@ -159,7 +170,7 @@ func getValidIPv4Addr(addrs []net.Addr) net.IP {
159170func initFlags () {
160171 flag .Usage = func () {
161172 fmt .Fprintf (os .Stderr , "Respounder version %1.1f\n " , Version )
162- fmt .Fprintf (os .Stderr , "Usage: $ respounder [-json] [-debug]" )
173+ fmt .Fprintf (os .Stderr , "Usage: $ respounder [-json] [-debug] [-computername anewcomputername] " )
163174 fmt .Fprintf (os .Stderr , "\n \n Flags:\n " )
164175 flag .PrintDefaults ()
165176 }
0 commit comments