/
banner_grabbing.go
41 lines (32 loc) · 805 Bytes
/
banner_grabbing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package syn_scan
import (
"fmt"
"time"
"github.com/evilsocket/islazy/async"
)
const bannerGrabTimeout = time.Duration(5) * time.Second
type bannerGrabberFn func(mod *SynScanner, ip string, port int) string
type grabberJob struct {
IP string
Port *OpenPort
}
func (mod *SynScanner) bannerGrabber(arg async.Job) {
job := arg.(grabberJob)
if job.Port.Proto != "tcp" {
return
}
ip := job.IP
port := job.Port.Port
sport := fmt.Sprintf("%d", port)
fn := tcpGrabber
if port == 80 || port == 443 || sport[0] == '8' {
fn = httpGrabber
} else if port == 53 || port == 5353 {
fn = dnsGrabber
}
mod.Debug("grabbing banner for %s:%d", ip, port)
job.Port.Banner = fn(mod, ip, port)
if job.Port.Banner != "" {
mod.Info("found banner for %s:%d -> %s", ip, port, job.Port.Banner)
}
}