From d3d2adefdd2daf40a05c3b5124abb8becc88c384 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Tue, 3 May 2016 07:31:56 -0700 Subject: [PATCH] go styling; move config to own package, retain scan in package main --- config/onionscan_config.go | 15 +++++++++ main.go | 6 ++-- onionscan.go | 53 ++++++++++++++++++++++++++++++ protocol/bitcoin_scanner.go | 5 +-- protocol/ftp_scanner.go | 5 +-- protocol/http_scanner.go | 9 +++--- protocol/irc_scanner.go | 5 +-- protocol/protocol_config.go | 63 ------------------------------------ protocol/protocol_scanner.go | 3 +- protocol/ricochet_scanner.go | 5 +-- protocol/smtp_scanner.go | 5 +-- protocol/ssh_scanner.go | 5 +-- 12 files changed, 96 insertions(+), 83 deletions(-) create mode 100644 config/onionscan_config.go create mode 100644 onionscan.go delete mode 100644 protocol/protocol_config.go diff --git a/config/onionscan_config.go b/config/onionscan_config.go new file mode 100644 index 0000000..d34308e --- /dev/null +++ b/config/onionscan_config.go @@ -0,0 +1,15 @@ +package config + +import () + +type OnionscanConfig struct { + TorProxyAddress string + DirectoryDepth int +} + +func Configure(torProxyAddress string, directoryDepth int) *OnionscanConfig { + onionScan := new(OnionscanConfig) + onionScan.TorProxyAddress = torProxyAddress + onionScan.DirectoryDepth = directoryDepth + return onionScan +} diff --git a/main.go b/main.go index 181a6a0..98743f0 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,10 @@ package main import ( "flag" "fmt" + "github.com/s-rah/onionscan/config" "io/ioutil" "log" "os" - "github.com/s-rah/onionscan/protocol" ) func main() { @@ -39,8 +39,8 @@ func main() { log.SetOutput(ioutil.Discard) } - onionScan := protocol.Configure(*torProxyAddress, *directoryDepth) - report, err := onionScan.Scan(hiddenService) + onionScanConfig := config.Configure(*torProxyAddress, *directoryDepth) + report, err := onionscan(onionScanConfig, hiddenService) if err != nil { log.Fatalf("Error running scanner: %s", err) diff --git a/onionscan.go b/onionscan.go new file mode 100644 index 0000000..9fae9b5 --- /dev/null +++ b/onionscan.go @@ -0,0 +1,53 @@ +package main + +import ( + "github.com/s-rah/onionscan/config" + "github.com/s-rah/onionscan/protocol" + "github.com/s-rah/onionscan/report" + "strings" +) + +func onionscan(onionscanConfig *config.OnionscanConfig, hiddenService string) (*report.OnionScanReport, error) { + + // Remove Extra Prefix + // TODO: Add support for HTTPS? + if strings.HasPrefix(hiddenService, "http://") { + hiddenService = hiddenService[7:] + } + + if strings.HasSuffix(hiddenService, "/") { + hiddenService = hiddenService[0 : len(hiddenService)-1] + } + + report := report.NewOnionScanReport(hiddenService) + + // HTTP + hps := new(protocol.HTTPProtocolScanner) + hps.ScanProtocol(hiddenService, onionscanConfig, report) + + // SSH + sps := new(protocol.SSHProtocolScanner) + sps.ScanProtocol(hiddenService, onionscanConfig, report) + + // Ricochet + rps := new(protocol.RicochetProtocolScanner) + rps.ScanProtocol(hiddenService, onionscanConfig, report) + + // Bitcoin + bps := new(protocol.BitcoinProtocolScanner) + bps.ScanProtocol(hiddenService, onionscanConfig, report) + + //IRC + ips := new(protocol.IRCProtocolScanner) + ips.ScanProtocol(hiddenService, onionscanConfig, report) + + //FTP + fps := new(protocol.FTPProtocolScanner) + fps.ScanProtocol(hiddenService, onionscanConfig, report) + + //SMTP + smps := new(protocol.SMTPProtocolScanner) + smps.ScanProtocol(hiddenService, onionscanConfig, report) + + return report, nil +} diff --git a/protocol/bitcoin_scanner.go b/protocol/bitcoin_scanner.go index 4eeb12b..01aa157 100644 --- a/protocol/bitcoin_scanner.go +++ b/protocol/bitcoin_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "h12.me/socks" "log" @@ -9,10 +10,10 @@ import ( type BitcoinProtocolScanner struct { } -func (rps *BitcoinProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (rps *BitcoinProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // Bitcoin log.Printf("Checking %s Bitcoin(8333)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":8333") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":8333") if err != nil { log.Printf("Failed to connect to service on port 8333\n") } else { diff --git a/protocol/ftp_scanner.go b/protocol/ftp_scanner.go index d09fc6b..106db45 100644 --- a/protocol/ftp_scanner.go +++ b/protocol/ftp_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "h12.me/socks" "log" @@ -9,10 +10,10 @@ import ( type FTPProtocolScanner struct { } -func (sps *FTPProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (sps *FTPProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // FTP log.Printf("Checking %s FTP(22)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":21") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":21") if err != nil { log.Printf("Failed to connect to service on port 21\n") } else { diff --git a/protocol/http_scanner.go b/protocol/http_scanner.go index 7d1abb7..0856182 100644 --- a/protocol/http_scanner.go +++ b/protocol/http_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "github.com/s-rah/onionscan/scans" "github.com/s-rah/onionscan/utils" @@ -22,17 +23,17 @@ var ( "/products", "/products/cat"} ) -func (hps *HTTPProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (hps *HTTPProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // HTTP log.Printf("Checking %s http(80)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":80") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":80") if err != nil { log.Printf("Failed to connect to service on port 80\n") } else { log.Printf("Found potential service on http(80)\n") report.WebDetected = true - dialSocksProxy := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress) + dialSocksProxy := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress) transportConfig := &http.Transport{ Dial: dialSocksProxy, } @@ -64,7 +65,7 @@ func (hps *HTTPProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolC directories := append(CommonDirectories, report.PageReferencedDirectories...) utils.RemoveDuplicates(&directories) for _, directory := range directories { - hps.ScanPage(hiddenService, directory, report, scans.CheckDirectoryListing(os.DirectoryDepth)) + hps.ScanPage(hiddenService, directory, report, scans.CheckDirectoryListing(onionscanConfig.DirectoryDepth)) } } log.Printf("\n") diff --git a/protocol/irc_scanner.go b/protocol/irc_scanner.go index 8db7732..a10eb7c 100644 --- a/protocol/irc_scanner.go +++ b/protocol/irc_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "h12.me/socks" "log" @@ -9,10 +10,10 @@ import ( type IRCProtocolScanner struct { } -func (rps *IRCProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (rps *IRCProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // IRC log.Printf("Checking %s IRC(6667)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":6667") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":6667") if err != nil { log.Printf("Failed to connect to service on port 6667\n") } else { diff --git a/protocol/protocol_config.go b/protocol/protocol_config.go deleted file mode 100644 index 7b239b3..0000000 --- a/protocol/protocol_config.go +++ /dev/null @@ -1,63 +0,0 @@ -package protocol - -import ( - "github.com/s-rah/onionscan/report" - "strings" -) - -type ProtocolConfig struct { - TorProxyAddress string - DirectoryDepth int -} - -func Configure(torProxyAddress string, directoryDepth int) *ProtocolConfig { - onionScan := new(ProtocolConfig) - onionScan.TorProxyAddress = torProxyAddress - onionScan.DirectoryDepth = directoryDepth - return onionScan -} - -func (os *ProtocolConfig) Scan(hiddenService string) (*report.OnionScanReport, error) { - - // Remove Extra Prefix - // TODO: Add support for HTTPS? - if strings.HasPrefix(hiddenService, "http://") { - hiddenService = hiddenService[7:] - } - - if strings.HasSuffix(hiddenService, "/") { - hiddenService = hiddenService[0 : len(hiddenService)-1] - } - - report := report.NewOnionScanReport(hiddenService) - - // HTTP - hps := new(HTTPProtocolScanner) - hps.ScanProtocol(hiddenService, os, report) - - // SSH - sps := new(SSHProtocolScanner) - sps.ScanProtocol(hiddenService, os, report) - - // Ricochet - rps := new(RicochetProtocolScanner) - rps.ScanProtocol(hiddenService, os, report) - - // Bitcoin - bps := new(BitcoinProtocolScanner) - bps.ScanProtocol(hiddenService, os, report) - - //IRC - ips := new(IRCProtocolScanner) - ips.ScanProtocol(hiddenService, os, report) - - //FTP - fps := new(FTPProtocolScanner) - fps.ScanProtocol(hiddenService, os, report) - - //SMTP - smps := new(SMTPProtocolScanner) - smps.ScanProtocol(hiddenService, os, report) - - return report, nil -} diff --git a/protocol/protocol_scanner.go b/protocol/protocol_scanner.go index e09200e..088bfeb 100644 --- a/protocol/protocol_scanner.go +++ b/protocol/protocol_scanner.go @@ -1,9 +1,10 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" ) type ProtocolScanner interface { - ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) + ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) } diff --git a/protocol/ricochet_scanner.go b/protocol/ricochet_scanner.go index 09d7e65..2679366 100644 --- a/protocol/ricochet_scanner.go +++ b/protocol/ricochet_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "h12.me/socks" "log" @@ -9,10 +10,10 @@ import ( type RicochetProtocolScanner struct { } -func (rps *RicochetProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (rps *RicochetProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // Ricochet log.Printf("Checking %s ricochet(9878)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":9878") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":9878") if err != nil { log.Printf("Failed to connect to service on port 9878\n") } else { diff --git a/protocol/smtp_scanner.go b/protocol/smtp_scanner.go index b467ad9..3fe7fe5 100644 --- a/protocol/smtp_scanner.go +++ b/protocol/smtp_scanner.go @@ -1,6 +1,7 @@ package protocol import ( + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "h12.me/socks" "log" @@ -9,10 +10,10 @@ import ( type SMTPProtocolScanner struct { } -func (sps *SMTPProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (sps *SMTPProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // SMTP log.Printf("Checking %s SMTP(25)\n", hiddenService) - _, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":25") + _, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":25") if err != nil { log.Printf("Failed to connect to service on port 25\n") } else { diff --git a/protocol/ssh_scanner.go b/protocol/ssh_scanner.go index 57cea23..ca957bd 100644 --- a/protocol/ssh_scanner.go +++ b/protocol/ssh_scanner.go @@ -4,6 +4,7 @@ import ( "crypto/md5" "errors" "fmt" + "github.com/s-rah/onionscan/config" "github.com/s-rah/onionscan/report" "golang.org/x/crypto/ssh" "h12.me/socks" @@ -14,10 +15,10 @@ import ( type SSHProtocolScanner struct { } -func (sps *SSHProtocolScanner) ScanProtocol(hiddenService string, os *ProtocolConfig, report *report.OnionScanReport) { +func (sps *SSHProtocolScanner) ScanProtocol(hiddenService string, onionscanConfig *config.OnionscanConfig, report *report.OnionScanReport) { // SSH log.Printf("Checking %s ssh(22)\n", hiddenService) - conn, err := socks.DialSocksProxy(socks.SOCKS5, os.TorProxyAddress)("", hiddenService+":22") + conn, err := socks.DialSocksProxy(socks.SOCKS5, onionscanConfig.TorProxyAddress)("", hiddenService+":22") if err != nil { log.Printf("Failed to connect to service on port 22\n") } else {