123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package kyoketsu
- import (
- "fmt"
- "log"
- "net"
- "syscall"
- "time"
- )
- type Host struct {
- Fqdn string
- IpAddress string
- PingResponse bool
- ListeningPorts []int
- PortString string
- Id int64
- }
- func PortWalk(addr string, ports []int) []int {
- out := []int{}
- for i := range ports {
- p := singlePortScan(addr, ports[i])
- if p != 0 {
- out = append(out, p)
- }
- }
- return out
- }
- type PortScanResult struct {
-
- PortNumber int `json:"port_number"`
- Service string `json:"service"`
- Protocol string `json:"protocol"`
- Listening bool `json:"listening"`
- }
- func RetrieveScanDirectives() []int {
- var portmap = []int{22, 443, 8080, 4379, 445, 53, 153, 27017}
-
- return portmap
- }
- func singlePortScan(addr string, port int) int {
- conn, err := net.DialTimeout("tcp", fmt.Sprintf("%v:%d", addr, port), 2*time.Second)
- if err != nil {
- return 0
-
- }
- conn.Close()
- return port
-
- }
- func NetSweep(ips []net.IP, ports []int) []Host {
- scanned := make(chan Host)
- for i := range ips {
- go func(target string, portnum []int) {
- scanned <- Host{
- IpAddress: target,
- ListeningPorts: PortWalk(target, portnum),
- }
- }(ips[i].String(), ports)
- }
- var hosts []Host
- for x := range scanned {
- fmt.Printf("%+v\n", x)
- hosts = append(hosts, x)
- }
- return hosts
- }
- func NewDialer() net.Dialer {
- return net.Dialer{}
- }
- func NewTCPSock(interfaceName string) *syscall.SockaddrLinklayer {
- sock, err := syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, syscall.ETH_P_IP)
- if err != nil {
- log.Fatal(err, " Could not create raw AF_PACKET socket.\n")
- }
- defer syscall.Close(sock)
- intf, err := net.InterfaceByName(interfaceName)
- if err != nil {
- log.Fatal(err, " Couldnt locate that interface. Are you sure you mean to pass ", interfaceName, " ?")
- }
- return &syscall.SockaddrLinklayer{
- Protocol: htons(syscall.ETH_P_IP),
- Ifindex: intf.Index,
- }
- }
- func htons(i uint16) uint16 {
- return (i<<8)&0xff00 | i>>8
- }
|