MCPcopy
hub / github.com/evilsocket/opensnitch / initSystemdResolvedMonitor

Function initSystemdResolvedMonitor

daemon/main.go:316–369  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

314}
315
316func initSystemdResolvedMonitor() {
317 resolvMonitor, err := systemd.NewResolvedMonitor()
318 if err != nil {
319 log.Debug("[DNS] Unable to use systemd-resolved monitor: %s", err)
320 return
321 }
322 _, err = resolvMonitor.Connect()
323 if err != nil {
324 log.Debug("[DNS] Connecting to systemd-resolved: %s", err)
325 return
326 }
327 err = resolvMonitor.Subscribe()
328 if err != nil {
329 log.Debug("[DNS] Subscribing to systemd-resolved DNS events: %s", err)
330 return
331 }
332 go func() {
333 var ip net.IP
334 for {
335 select {
336 case exit := <-resolvMonitor.Exit():
337 if exit == nil {
338 log.Info("[DNS] systemd-resolved monitor stopped")
339 return
340 }
341 log.Debug("[DNS] systemd-resolved monitor disconnected. Reconnecting...")
342 case response := <-resolvMonitor.GetDNSResponses():
343 if response.State != systemd.SuccessState {
344 log.Debug("[DNS] systemd-resolved monitor response error: %v", response)
345 continue
346 }
347 /*for i, q := range response.Question {
348 log.Trace("[DNS] %d systemd response, question: %s", i, q.Name)
349 }*/
350 for i, a := range response.Answer {
351 if a.RR.Key.Type != systemd.DNSTypeA &&
352 a.RR.Key.Type != systemd.DNSTypeAAAA &&
353 a.RR.Key.Type != systemd.DNSTypeCNAME {
354 log.Trace("systemd-resolved, excluding answer: %#v", a)
355 continue
356 }
357 if a.RR.Key.Type == systemd.DNSTypeCNAME {
358 log.Debug("systemd-resolved CNAME >> %s -> %s", a.RR.Name, a.RR.Key.Name)
359 dns.Track(a.RR.Name, a.RR.Key.Name /*domain*/)
360 } else {
361 ip = net.IP(a.RR.Address)
362 log.Debug("%d systemd-resolved monitor response: %s -> %s", i, a.RR.Key.Name, ip)
363 dns.Track(ip.String(), a.RR.Key.Name /*domain*/)
364 }
365 }
366 }
367 }
368 }()
369}
370
371func doCleanup(queue, repeatQueue *netfilter.Queue) {
372 log.Info("Cleaning up ...")

Callers 1

mainFunction · 0.85

Calls 5

ConnectMethod · 0.95
SubscribeMethod · 0.95
ExitMethod · 0.95
GetDNSResponsesMethod · 0.95
StringMethod · 0.45

Tested by

no test coverage detected