work with data files

This commit is contained in:
Miek Gieben 2012-01-28 12:53:39 +01:00
parent 9ec2c9dacf
commit 73c0b2d3a6
4 changed files with 45 additions and 14 deletions

4
examples/fp/data/Bind9 Normal file
View File

@ -0,0 +1,4 @@
.,CH,TXT,QUERY,NOERROR,qr,aa,tc,RD,ra,ad,cd,z,0,0,0,0,DO,4097,NSID .,CH,TXT,QUERY,REFUSED,QR,aa,tc,RD,ra,ad,cd,z,1,0,0,1,DO,4096,NSID
auThoRs.bInD.,CH,TXT,QUERY,NOERROR,qr,aa,tc,rd,ra,ad,cd,z,0,0,0,0,do,0,nsid auThoRs.bInD.,CH,TXT,QUERY,NOERROR,QR,AA,tc,rd,ra,ad,cd,z,1,15,1,0,do,0,nsid
bind.,NONE,SOA,NOTIFY,NOERROR,qr,AA,tc,RD,ra,ad,cd,Z,0,0,0,0,do,0,nsid bind.,NONE,SOA,NOTIFY,REFUSED,QR,aa,tc,RD,ra,ad,cd,z,1,0,0,0,do,0,nsid

4
examples/fp/data/Nsd3 Normal file
View File

@ -0,0 +1,4 @@
# NSD3 fingerprint
.,CH,TXT,QUERY,NOERROR,qr,aa,tc,RD,ra,ad,cd,z,0,0,0,0,DO,4097,NSID .,CH,TXT,QUERY,NOERROR,QR,aa,tc,RD,ra,ad,cd,z,1,0,0,1,DO,4096,nsid
auThoRs.bInD.,CH,TXT,QUERY,NOERROR,qr,aa,tc,rd,ra,ad,cd,z,0,0,0,0,do,0,nsid auThoRs.bInD.,CH,TXT,QUERY,NOERROR,QR,aa,tc,rd,ra,ad,cd,z,1,0,0,0,do,0,nsid
bind.,NONE,SOA,NOTIFY,NOERROR,qr,AA,tc,RD,ra,ad,cd,Z,0,0,0,0,do,0,nsid .,CLASS0,TYPE0,NOTIFY,NXDOMAIN,QR,AA,tc,RD,ra,ad,cd,z,0,0,0,0,do,0,nsid

View File

@ -2,7 +2,9 @@
package main
import (
"bufio"
"dns"
"os"
"strconv"
"strings"
)
@ -132,6 +134,13 @@ func (f *fingerprint) StringNoSections() string {
return strings.Join(s[2:13], ",")
}
// Return a new fingerprint, set from string
func newFingerprint(s string) *fingerprint {
f := new(fingerprint)
f.setString(s)
return f
}
// SetString sets the strings str to the fingerprint *f.
func (f *fingerprint) setString(str string) {
for i, s := range strings.Split(str, ",") {
@ -349,6 +358,30 @@ func (f *fingerprint) compare(f1 *fingerprint) (diff int) {
return
}
// Read the finger prints from the file. Lines starting with
// # are comments. Each line should contain one fingerprint in string format.
func fingerPrintFromFile(f string) ([]*fingerprint, error) {
r, e := os.Open(f)
if e != nil {
return nil, e
}
b := bufio.NewReader(r)
l, p, e := b.ReadLine()
i := 1
prints := make([]*fingerprint, 0)
for e == nil {
if p {
return nil, nil
}
if l[0] != '#' {
prints = append(prints, newFingerprint(string(l)))
}
l, p, e = b.ReadLine()
i++
}
return prints, nil
}
func valueOfBool(b bool, w string) string {
if b {
return strings.ToUpper(w)

View File

@ -38,19 +38,9 @@ func main() {
nameserver = string([]byte(nameserver)[1:]) // chop off @
nameserver += ":" + strconv.Itoa(*port)
c := dns.NewClient()
fp := new(fingerprint)
for _, s := range fingerprints() {
fp.setString(s)
fp1 := probe(c, nameserver, fp)
println(s, "|", fp1.String())
}
}
// A list of all the evil finger prints
func fingerprints() []string {
return []string{
".,CH,TXT,QUERY,NOERROR,qr,aa,tc,RD,ra,ad,cd,z,0,0,0,0,DO,4097,NSID", // general
"auThoRs.bInD.,CH,TXT,QUERY,NOERROR,qr,aa,tc,rd,ra,ad,cd,z,0,0,0,0,do,0,nsid", // case
"bind.,NONE,SOA,NOTIFY,NOERROR,qr,AA,tc,RD,ra,ad,cd,Z,0,0,0,0,do,0,nsid", // notify
prints, _ := fingerPrintFromFile("data/q")
for _, f := range prints {
f1 := probe(c, nameserver, f)
println(f.String(), f1.String())
}
}