Browse Source

Add support to start crawling from one initial ip address

master
Lyndsay Roger 9 years ago
parent
commit
75767b0eeb
  1. 38
      network.go
  2. 24
      seeder.go

38
network.go

@ -14,14 +14,12 @@ import ( @@ -14,14 +14,12 @@ import (
type JNetwork struct {
Name string
Desc string
SeederType string
Secret string
Remote string
Id string
Port uint16
Pver uint32
DNSName string
TTL uint32
InitialIP string
Seeder1 string
Seeder2 string
Seeder3 string
@ -39,9 +37,7 @@ func createNetFile() { @@ -39,9 +37,7 @@ func createNetFile() {
DNSName: "seeder.example.com",
Name: "SeederNet",
Desc: "Description of SeederNet",
SeederType: "Combined",
Secret: "32bYTesoFSECretThAtiSASecrET!!",
Remote: "http://dnsserver.example.com:1234/updatedns",
InitialIP: "",
Seeder1: "seeder1.example.com",
Seeder2: "seed1.bob.com",
Seeder3: "seed2.example.com",
@ -91,12 +87,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) { @@ -91,12 +87,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) {
return nil, errors.New(fmt.Sprintf("No DNS Hostname supplied"))
}
// we only need a secret if we are a crawler or dns type
if needSecret := convertSeederType(jnw.SeederType); needSecret != typeCombined {
if ok := checkBlockSize(jnw.Secret); ok != true {
return nil, errors.New(fmt.Sprintf("shared secret must be either 16, 24 or 32 bytes long. currently: %v", len(jnw.Secret)))
}
}
if _, ok := config.seeders[jnw.Name]; ok {
return nil, errors.New(fmt.Sprintf("Name already exists from previous file - %s", jnw.Name))
}
@ -110,9 +100,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) { @@ -110,9 +100,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) {
seeder.name = jnw.Name
seeder.desc = jnw.Desc
seeder.dnsHost = jnw.DNSName
seeder.seederType = convertSeederType(jnw.SeederType)
seeder.secret = jnw.Secret
seeder.remote = jnw.Remote
// conver the network magic number to a Uint32
t1, err := strconv.ParseUint(jnw.Id, 0, 32)
@ -121,6 +108,8 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) { @@ -121,6 +108,8 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) {
}
seeder.id = wire.BitcoinNet(t1)
seeder.initialIP = jnw.InitialIP
// load the seeder dns
seeder.seeders = make([]string, 3)
seeder.seeders[0] = jnw.Seeder1
@ -154,25 +143,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) { @@ -154,25 +143,6 @@ func initNetwork(jnw JNetwork) (*dnsseeder, error) {
return seeder, nil
}
func convertSeederType(seederType string) uint32 {
switch seederType {
case "Crawl":
return typeCrawl
case "DNS":
return typeDNS
default:
return typeCombined
}
}
func checkBlockSize(secret string) bool {
s := len(secret)
if s == 16 || s == 24 || s == 32 {
return true
}
return false
}
/*
*/

24
seeder.go

@ -45,13 +45,6 @@ const ( @@ -45,13 +45,6 @@ const (
maxStatusTypes // used in main to allocate slice
)
const (
// seederType
typeCombined = iota // This seeder both crawls and provides dns responses
typeCrawl // this seeder just crawls the network and sends ip info to a remote dns server
typeDNS // this seeder just provides dns data to clients and does no crawling itself
)
type dnsseeder struct {
id wire.BitcoinNet // Magic number - Unique ID for this network. Sent in header of all messages
theList map[string]*node // the list of current nodes
@ -63,9 +56,7 @@ type dnsseeder struct { @@ -63,9 +56,7 @@ type dnsseeder struct {
dnsHost string // dns host we will serve results for this domain
name string // Short name for the network
desc string // Long description for the network
seederType uint32 // Combined, crawl or DNS only
secret string // Shared secret with remote seeder to encrypt messages
remote string // Remote host and port to send dns info if we are a crawler
initialIP string // Initial ip address to connect to and ask for addresses if we have no seeders
seeders []string // slice of seeders to pull ip addresses when starting this seeder
maxStart []uint32 // max number of goroutines to start each run for each status type
delay []int64 // number of seconds to wait before we connect to a known client for each status
@ -101,12 +92,23 @@ func (s *dnsseeder) initCrawlers() { @@ -101,12 +92,23 @@ func (s *dnsseeder) initCrawlers() {
log.Printf("%s: completed import of %v addresses from %s\n", s.name, c, aseeder)
}
}
// load one ip address into system and start crawling from it
if len(s.theList) == 0 && s.initialIP != "" {
if newIP := net.ParseIP(s.initialIP); newIP != nil {
// 1 at the end is the services flag
if x := s.addNa(wire.NewNetAddressIPPort(newIP, s.port, 1)); x == true {
log.Printf("%s: crawling with initial IP %s \n", s.name, s.initialIP)
}
}
}
if len(s.theList) == 0 {
log.Printf("%s: Error: No ip addresses from seeders so I have nothing to crawl.\n", s.name)
for _, v := range s.seeders {
log.Printf("%s: Seeder: %s\n", s.name, v)
}
log.Printf("%s: Initial IP: %s\n", s.name, s.initialIP)
}
}

Loading…
Cancel
Save