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 }