etc.git


etc

~ scripts and random things
git clone https://github.com/djnnvx/etc.git
log | files | refs | archive

runner.go (1171B)

      1 package dkim
      2 
      3 import (
      4 	"github.com/miekg/dns"
      5 
      6 	"fmt"
      7 	"strings"
      8 )
      9 
     10 func (dk *DkimRunner) Run(maxLen int32) error {
     11 	dkimPrefix := "k=rsa; p="
     12 
     13 	m := new(dns.Client)
     14 	for _, domain := range dk.Domains {
     15 		q := dns.Question{
     16 			Name:   domain + ".",
     17 			Qtype:  dns.TypeTXT,
     18 			Qclass: dns.ClassINET,
     19 		}
     20 
     21 		m1 := new(dns.Msg)
     22 		m1.Id = dns.Id()
     23 		m1.RecursionDesired = true
     24 		m1.Question = make([]dns.Question, 1)
     25 		m1.Question[0] = q
     26 
     27 		/* make DNS request */
     28 		msg, _, err := m.Exchange(m1, dk.DnsServer+":53")
     29 		if err != nil {
     30 			println("[+] Could not contact exchange server")
     31 			return err
     32 		}
     33 
     34 		/* get TXT records from Answer */
     35 		for _, rr := range msg.Answer {
     36 			if rr.Header().Rrtype == dns.TypeTXT {
     37 				txt := rr.(*dns.TXT).Txt
     38 
     39 				for _, t := range txt {
     40 
     41 					/* we have found something that looks like a DKIM record */
     42 					if strings.HasPrefix(t, dkimPrefix) {
     43 
     44 						key := strings.TrimPrefix(t, dkimPrefix)
     45 						kLen := len(key)
     46 
     47 						/* key is bigger than our max-size, we discard */
     48 						if int32(kLen) > maxLen {
     49 							continue
     50 						}
     51 
     52 						fmt.Printf("[+] => %s: %s (len: %d)\n", domain, key, kLen)
     53 					}
     54 				}
     55 			}
     56 		}
     57 	}
     58 
     59 	return nil
     60 }