|
@@ -1,12 +1,10 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
- "encoding/json"
|
|
|
"flag"
|
|
|
"fmt"
|
|
|
"log"
|
|
|
"net"
|
|
|
- "os"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
|
|
@@ -15,66 +13,31 @@ import (
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
- local := flag.Bool("local", true, "set flag to false to run this in targeted remote mode")
|
|
|
- remoteAddrs := flag.String("ips", "", "comma seperated list of ip addresses to gather info about")
|
|
|
- iface := flag.String("iface", "eth0", "use this flag to specify the interface to autonomously use for scanning.")
|
|
|
+ ip := flag.String("ips", "", "single ip address with CIDR notation to gather info about")
|
|
|
flag.Parse()
|
|
|
|
|
|
- if !*local {
|
|
|
- spAddr := strings.Split(*remoteAddrs, ",")
|
|
|
- addr, err := kyoketsu.GetAllRemoteAddresses(spAddr, 65535)
|
|
|
- if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
- }
|
|
|
- b, err := json.Marshal(addr)
|
|
|
- if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
- }
|
|
|
- os.WriteFile("test/slash16_ips.json", b, os.ModePerm)
|
|
|
-
|
|
|
- log.Printf("Starting scan on %v devices.\n", len(addr.Addr))
|
|
|
- var wg sync.WaitGroup
|
|
|
- for i := range addr.Addr {
|
|
|
- wg.Add(1)
|
|
|
- go func(idx int, wg *sync.WaitGroup) {
|
|
|
-
|
|
|
- out := kyoketsu.PortWalk(addr.Addr[idx].String(), kyoketsu.PORT_MAP)
|
|
|
- if len(out.ListeningPorts) > 0 {
|
|
|
- dns, _ := net.LookupAddr(out.IpAddress)
|
|
|
- out.Fqdn = strings.Join(dns, ", ")
|
|
|
-
|
|
|
- fmt.Printf("%+v\n", out)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- wg.Done()
|
|
|
- }(i, &wg)
|
|
|
- }
|
|
|
-
|
|
|
- wg.Wait()
|
|
|
-
|
|
|
- } else {
|
|
|
- addr, err := kyoketsu.GetAllAddresses(*iface, 65535)
|
|
|
- if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
- }
|
|
|
- log.Printf("Starting scan on %v devices.\n", len(addr.Addr))
|
|
|
- var wg sync.WaitGroup
|
|
|
- for i := range addr.Addr {
|
|
|
- wg.Add(1)
|
|
|
- go func(idx int, wg *sync.WaitGroup) {
|
|
|
-
|
|
|
- out := kyoketsu.PortWalk(addr.Addr[idx].String(), kyoketsu.PORT_MAP)
|
|
|
- if len(out.ListeningPorts) > 0 {
|
|
|
- fmt.Printf("%+v\n", out)
|
|
|
+ var err error
|
|
|
+ var addr *kyoketsu.IpSubnetMapper
|
|
|
+ addr, err = kyoketsu.GetNetworkAddresses(*ip)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+ var wg sync.WaitGroup
|
|
|
+ for i := range addr.Ipv4s {
|
|
|
+ wg.Add(1)
|
|
|
+ go func(target string, wg *sync.WaitGroup) {
|
|
|
+ defer wg.Done()
|
|
|
+ out := kyoketsu.PortWalk(target, kyoketsu.PORT_MAP)
|
|
|
+ if len(out.ListeningPorts) > 0 {
|
|
|
+ dns, _ := net.LookupAddr(out.IpAddress)
|
|
|
+ out.Fqdn = strings.Join(dns, ", ")
|
|
|
|
|
|
- }
|
|
|
+ fmt.Printf("%+v\n", out)
|
|
|
|
|
|
- wg.Done()
|
|
|
- }(i, &wg)
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- wg.Wait()
|
|
|
+ }(addr.Ipv4s[i].String(), &wg)
|
|
|
|
|
|
}
|
|
|
+ wg.Wait()
|
|
|
}
|