Initial Commit
This commit is contained in:
commit
030f2782a1
34
main.go
Normal file
34
main.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
remoteIpPtr := flag.String("remote", "", "Remote Server")
|
||||||
|
|
||||||
|
flag.Parse()
|
||||||
|
ports := flag.Args()
|
||||||
|
remoteIp := *remoteIpPtr
|
||||||
|
fmt.Println(remoteIp)
|
||||||
|
var hostWG sync.WaitGroup
|
||||||
|
|
||||||
|
ports = portsSetup(ports)
|
||||||
|
go scanIp(ports, remoteIp, &hostWG)
|
||||||
|
hostWG.Add(1)
|
||||||
|
|
||||||
|
hostWG.Wait()
|
||||||
|
fmt.Println("Process complete.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func portsSetup(ports []string) []string {
|
||||||
|
if len(ports) == 0 {
|
||||||
|
for i := 1; i < 65535; i++ {
|
||||||
|
ports = append(ports, strconv.FormatInt(int64(i), 10))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ports
|
||||||
|
}
|
39
main_test.go
Normal file
39
main_test.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPortsSetup(t *testing.T) {
|
||||||
|
t.Run("Single Port", func(t *testing.T) {
|
||||||
|
want := []string{"1"}
|
||||||
|
got := portsSetup(want)
|
||||||
|
|
||||||
|
assertEqual(t, got, want)
|
||||||
|
})
|
||||||
|
t.Run("Multi Port", func(t *testing.T) {
|
||||||
|
want := []string{"1", "2"}
|
||||||
|
got := portsSetup(want)
|
||||||
|
|
||||||
|
assertEqual(t, got, want)
|
||||||
|
})
|
||||||
|
t.Run("Empty Port", func(t *testing.T) {
|
||||||
|
var ports, want []string
|
||||||
|
got := portsSetup(ports)
|
||||||
|
|
||||||
|
for i := 1; i < 65535; i++ {
|
||||||
|
want = append(want, strconv.FormatInt(int64(i), 10))
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEqual(t, got, want)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func assertEqual(t testing.TB, got, want []string) {
|
||||||
|
t.Helper()
|
||||||
|
if !reflect.DeepEqual(got, want) {
|
||||||
|
t.Errorf("got %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
}
|
33
portscan.go
Normal file
33
portscan.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func connection(port string, ip string, portWG *sync.WaitGroup) (bool, error) {
|
||||||
|
connString := ip + ":" + port
|
||||||
|
timeout := time.Second * time.Duration(5)
|
||||||
|
conn, err := net.DialTimeout("tcp", connString, timeout)
|
||||||
|
if err != nil {
|
||||||
|
defer portWG.Done()
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
conn.Close()
|
||||||
|
fmt.Println(port)
|
||||||
|
defer portWG.Done()
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanIp(ports []string, ip string, hostWG *sync.WaitGroup) {
|
||||||
|
var portWG sync.WaitGroup
|
||||||
|
|
||||||
|
for i := range ports {
|
||||||
|
portWG.Add(1)
|
||||||
|
go connection(ports[i], ip, &portWG)
|
||||||
|
}
|
||||||
|
portWG.Wait()
|
||||||
|
defer hostWG.Done()
|
||||||
|
}
|
25
portscan_test.go
Normal file
25
portscan_test.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConnection(t *testing.T) {
|
||||||
|
t.Run("Test Connection", func(t *testing.T) {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestScanIp(t *testing.T) {
|
||||||
|
t.Run("Test Scan IP", func(t *testing.T) {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type MockConn struct {
|
||||||
|
net.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockConn) Read(b []byte) (int, error) {
|
||||||
|
return 0, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user