diff --git a/.gitignore b/.gitignore
index 10b16c9..3cb1b47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
meg
prefixes
+hosts
suffixes
+paths
domains
out
*.swp
diff --git a/README.mkd b/README.mkd
index 28437a1..1641729 100644
--- a/README.mkd
+++ b/README.mkd
@@ -22,7 +22,7 @@ put it somewhere in your `$PATH`.
## Basic Usage
-Given a file full of *suffixes*:
+Given a file full of paths:
```
/robots.txt
@@ -30,7 +30,7 @@ Given a file full of *suffixes*:
/package.json
```
-And a file full of *prefixes*:
+And a file full of hosts (with a protocol):
```
http://example.com
@@ -38,10 +38,10 @@ https://example.com
http://example.net
```
-`meg` will request each *suffix* for every *prefix*:
+`meg` will request each *path* for every *host*:
```
-▶ meg --verbose suffixes prefixes
+▶ meg --verbose paths hosts
out/example.com/45ed6f717d44385c5e9c539b0ad8dc71771780e0 http://example.com/robots.txt (404 Not Found)
out/example.com/61ac5fbb9d3dd054006ae82630b045ba730d8618 https://example.com/robots.txt (404 Not Found)
out/example.net/1432c16b671043271eab84111242b1fe2a28eb98 http://example.net/robots.txt (404 Not Found)
@@ -75,8 +75,8 @@ http://example.com/robots.txt
```
-Without any arguments, meg will read suffixes from a file called `suffixes`,
-and prefixes from a file called `prefixes`. There will also be no output:
+Without any arguments, meg will read paths from a file called `./paths`,
+and hosts from a file called `./hosts`. There will also be no output:
```
▶ meg
@@ -100,7 +100,7 @@ out/example.com/61ac5fbb9d3dd054006ae82630b045ba730d8618:14:< Server: ECS (lga/1
out/example.com/bd8d9f4c470ffa0e6ec8cfa8ba1c51d62289b6dd:16:< Server: ECS (lga/13A3)
```
-If you want to request just one suffix, you can specify it directly as an argument:
+If you want to request just one path, you can specify it directly as an argument:
```
▶ meg /admin.php
@@ -112,10 +112,10 @@ meg's help output tries to actually be helpful:
```
▶ meg --help
-Request many paths (suffixes) for many hosts (prefixes)
+Request many paths for many hosts
Usage:
- meg [suffix|suffixFile] [prefixFile] [outputDir]
+ meg [path|pathsFile] [hostsFile] [outputDir]
Options:
-c, --concurrency Set the concurrency level (defaut: 20)
@@ -127,16 +127,16 @@ Options:
-X, --method HTTP method (default: GET)
Defaults:
- suffixFile: ./suffixes
- prefixFile: ./prefixes
+ pathsFile: ./paths
+ hostsFile: ./hosts
outputDir: ./out
-Suffix file format:
+Paths file format:
/robots.txt
/package.json
/security.txt
-Prefix file format:
+Hosts file format:
http://example.com
https://example.edu
https://example.net
@@ -156,7 +156,7 @@ with the `-c` or `--concurrency` option:
```
It's not very friendly to keep the concurrency level higher than the number of
-prefixes - you may end up sending lots of requests to one host at once.
+hosts - you may end up sending lots of requests to one host at once.
### Delay
By default meg will wait 5000 milliseconds between requests to the same host.
diff --git a/args.go b/args.go
index 91cd541..26e43f8 100644
--- a/args.go
+++ b/args.go
@@ -26,8 +26,8 @@ type config struct {
saveStatus int
requester requester
verbose bool
- suffix string
- prefix string
+ paths string
+ hosts string
output string
}
@@ -74,16 +74,16 @@ func processArgs() config {
flag.Parse()
- // suffixes might be in a file, or it might be a single value
- suffix := flag.Arg(0)
- if suffix == "" {
- suffix = "suffixes"
+ // paths might be in a file, or it might be a single value
+ paths := flag.Arg(0)
+ if paths == "" {
+ paths = "paths"
}
- // prefixes are always in a file
- prefix := flag.Arg(1)
- if prefix == "" {
- prefix = "prefixes"
+ // hosts are always in a file
+ hosts := flag.Arg(1)
+ if hosts == "" {
+ hosts = "hosts"
}
// default the output directory to ./out
@@ -106,18 +106,18 @@ func processArgs() config {
saveStatus: saveStatus,
requester: requesterFn,
verbose: verbose,
- suffix: suffix,
- prefix: prefix,
+ paths: paths,
+ hosts: hosts,
output: output,
}
}
func init() {
flag.Usage = func() {
- h := "Request many paths (suffixes) for many hosts (prefixes)\n\n"
+ h := "Request many paths for many hosts\n\n"
h += "Usage:\n"
- h += " meg [suffix|suffixFile] [prefixFile] [outputDir]\n\n"
+ h += " meg [path|pathsFile] [hostsFile] [outputDir]\n\n"
h += "Options:\n"
h += " -c, --concurrency Set the concurrency level (defaut: 20)\n"
@@ -129,16 +129,16 @@ func init() {
h += " -X, --method HTTP method (default: GET)\n\n"
h += "Defaults:\n"
- h += " suffixFile: ./suffixes\n"
- h += " prefixFile: ./prefixes\n"
+ h += " pathsFile: ./paths\n"
+ h += " hostsFile: ./hosts\n"
h += " outputDir: ./out\n\n"
- h += "Suffix file format:\n"
+ h += "Paths file format:\n"
h += " /robots.txt\n"
h += " /package.json\n"
h += " /security.txt\n\n"
- h += "Prefix file format:\n"
+ h += "Hosts file format:\n"
h += " http://example.com\n"
h += " https://example.edu\n"
h += " https://example.net\n\n"
diff --git a/main.go b/main.go
index 981fa88..8255ef4 100644
--- a/main.go
+++ b/main.go
@@ -19,24 +19,24 @@ func main() {
// get the config struct
c := processArgs()
- // if the suffix argument is a file, read it; otherwise
+ // if the paths argument is a file, read it; otherwise
// treat it as a literal value
- var suffixes []string
- if isFile(c.suffix) {
- lines, err := readLines(c.suffix)
+ var paths []string
+ if isFile(c.paths) {
+ lines, err := readLines(c.paths)
if err != nil {
- fmt.Fprintf(os.Stderr, "failed to open suffix file: %s\n", err)
+ fmt.Fprintf(os.Stderr, "failed to open paths file: %s\n", err)
os.Exit(1)
}
- suffixes = lines
- } else if c.suffix != "suffixes" {
- suffixes = []string{c.suffix}
+ paths = lines
+ } else if c.paths != "paths" {
+ paths = []string{c.paths}
}
- // read the prefix file
- prefixes, err := readLines(c.prefix)
+ // read the hosts file
+ hosts, err := readLines(c.hosts)
if err != nil {
- fmt.Fprintf(os.Stderr, "failed to open prefix file: %s\n", err)
+ fmt.Fprintf(os.Stderr, "failed to open hosts file: %s\n", err)
os.Exit(1)
}
@@ -106,14 +106,14 @@ func main() {
owg.Done()
}()
- // send requests for each suffix for every prefix
- for _, suffix := range suffixes {
- for _, prefix := range prefixes {
+ // send requests for each path for every host
+ for _, path := range paths {
+ for _, host := range hosts {
requests <- request{
method: c.method,
- prefix: prefix,
- suffix: suffix,
+ host: host,
+ path: path,
headers: c.headers,
}
}
diff --git a/rawhttp.go b/rawhttp.go
index 41d3082..aa35340 100644
--- a/rawhttp.go
+++ b/rawhttp.go
@@ -8,12 +8,12 @@ import (
)
func rawRequest(r request) response {
- req, err := rawhttp.FromURL(r.method, r.prefix)
+ req, err := rawhttp.FromURL(r.method, r.host)
if err != nil {
return response{request: r, err: err}
}
- req.Path = r.suffix
+ req.Path = r.path
r.headers = append(r.headers, "Connection: close")
diff --git a/request.go b/request.go
index ff58fa5..abf7b25 100644
--- a/request.go
+++ b/request.go
@@ -8,14 +8,14 @@ import (
// a request is a wrapper for a URL that we want to request
type request struct {
method string
- prefix string
- suffix string
+ path string
+ host string
headers []string
}
// Hostname returns the hostname part of the request
func (r request) Hostname() string {
- u, err := url.Parse(r.prefix)
+ u, err := url.Parse(r.host)
// the hostname part is used only for the rate
// limiting and the
@@ -27,7 +27,7 @@ func (r request) Hostname() string {
// URL returns the full URL to request
func (r request) URL() string {
- return r.prefix + r.suffix
+ return r.host + r.path
}
// hasHeader returns true if the request
diff --git a/response.go b/response.go
index 4975b4d..36105bb 100644
--- a/response.go
+++ b/response.go
@@ -28,7 +28,7 @@ func (r response) String() string {
b.WriteString(r.request.URL())
b.WriteString("\n\n")
- b.WriteString(fmt.Sprintf("> %s %s HTTP/1.1\n", r.request.method, r.request.suffix))
+ b.WriteString(fmt.Sprintf("> %s %s HTTP/1.1\n", r.request.method, r.request.path))
// request headers
for _, h := range r.request.headers {