@@ -8,26 +8,29 @@ import (
8
8
"github.com/n0ncetonic/nmapxml"
9
9
"log"
10
10
"os"
11
+ "strings"
11
12
)
12
13
13
14
func main () {
14
15
var inputArg = flag .String ("x" , "" , "Nmap XML Input File (Required)" )
15
16
var dnsxArg = flag .String ("dnsx" , "" , "dnsx -resp output data (Optional)" )
16
17
var vhostRep = flag .Bool ("vhost" , false , "Use dnsx data to insert vhosts (Optional)" )
18
+ var urlArg = flag .Bool ("urls" , false , "Guess HTTP URLs from input (Optional)" )
17
19
var outputArg = flag .String ("o" , "" , "Output filename (Optional)" )
18
20
flag .Parse ()
19
21
20
22
input := * inputArg
21
23
output := * outputArg
22
24
dnsx := * dnsxArg
23
25
vhost := * vhostRep
26
+ urls := * urlArg
24
27
25
28
if input == "" {
26
29
flag .PrintDefaults ()
27
30
os .Exit (1 )
28
31
}
29
32
30
- results := ParseNmap (input , dnsx , vhost )
33
+ results := ParseNmap (input , dnsx , vhost , urls )
31
34
32
35
for _ , line := range results {
33
36
fmt .Println (line )
@@ -67,7 +70,7 @@ func Unique(slice []string) []string {
67
70
return uniqSlice
68
71
}
69
72
70
- func ParseNmap (input string , dnsx string , vhost bool ) []string {
73
+ func ParseNmap (input string , dnsx string , vhost bool , urls bool ) []string {
71
74
/* ParseNmap parses a Nmap XML file */
72
75
var index map [string ][]string
73
76
var output []string
@@ -92,21 +95,37 @@ func ParseNmap(input string, dnsx string, vhost bool) []string {
92
95
for _ , portData := range * host .Ports .Port {
93
96
if portData .State .State == "open" {
94
97
portID := portData .PortID
98
+ service := portData .Service .Name
95
99
96
100
if vhost {
97
101
for _ , ipp := range index {
98
102
domains := ipp
99
103
100
104
for _ , dom := range domains {
101
- //fmt.Println(dom + ":" + portID)
102
- line := dom + ":" + portID
103
- output = append (output , line )
105
+ line := ""
106
+ if urls {
107
+ line = GenUrl (dom , portID , service )
108
+ } else {
109
+ line = dom + ":" + portID
110
+ }
111
+
112
+ if line != "" {
113
+ output = append (output , line )
114
+ }
104
115
}
105
116
}
106
117
107
118
} else {
108
- line := ipAddr + ":" + portID
109
- output = append (output , line )
119
+ line := ""
120
+ if urls {
121
+ line = GenUrl (ipAddr , portID , service )
122
+ } else {
123
+ line = ipAddr + ":" + portID
124
+ }
125
+
126
+ if line != "" {
127
+ output = append (output , line )
128
+ }
110
129
//fmt.Println(ipAddr + ":" + portID)
111
130
}
112
131
}
@@ -118,6 +137,25 @@ func ParseNmap(input string, dnsx string, vhost bool) []string {
118
137
return uniq
119
138
}
120
139
140
+ func GenUrl (host string , port string , service string ) string {
141
+ /* GenURl generates a URL for a given sequence */
142
+ url := ""
143
+ if service == "http" || service == "https" {
144
+ url = service + "://" + host
145
+ } else if strings .Contains (service , "http" ) {
146
+ if strings .Contains (port , "80" ) {
147
+ service = "http"
148
+ } else if strings .Contains (port , "443" ) {
149
+ service = "https"
150
+ } else {
151
+ service = "http"
152
+ }
153
+ url = service + "://" + host + ":" + port
154
+ }
155
+
156
+ return url
157
+ }
158
+
121
159
func ParseDnsx (filename string ) map [string ][]string {
122
160
/* ParseDnsx parses a DNSX JSON file */
123
161
var data = map [string ][]string {}
0 commit comments