GO language realiza escaneo de puertos

= func (c runa) bool {return c == '.' }


 
    lisit: = strings.FieldsFunc (ip,canSplit) // [58215 20 30]
    //fmt.Println(lisit) 
    ip1_str_int, _: = strconv.Atoi (lisit [0]) 
    ip2_str_int, _: = strconv.Atoi (lisit [1]) 
    ip3_str_int, _: = strconv.Atoi (lisit [2]) 
    ip4_str_int, _: = strconv.Atoi (lisit [3]) 
    return ip1_str_int << 24 | ip2_str_int << 16 | ip3_str_int << 8 | ip4_str_int 
} 

func num2ip (num int) cadena { 
    ip1_int: = (num & 0xff000000) >> 24 
    ip2_int: = (num & 0x00ff0000) >> 16 
    ip3_int: = (num & 0x0000ff00) >> 8 
    ip4_int: = num & 0x000000ff 
    / /fmt.Println(ip1_int) 
    datos: = fmt.Sprintf ("% d.% d.% d.% d", ip1_int, ip2_int, ip3_int, ip4_int) 
} 

func gen_ip (Aip1 int,
    para índice <Aip2 { 
        //fmt.Println(num2ip(index)) 
        // 入 队, 压栈
        ip_data: = num2ip (índice) 
        //fmt.Println(ip_data) 
        l.PushBack (ip_data) 
        index ++ 
    } 
} 

func text_add ( cadena de nombre, cadena de datos) {// 向 文件 中 写入 数据 text_add ("file2.txt", "qqqqqqqqqqqqqqqqqqqqqqq") 
    f, err: = os.OpenFile (name, os.O_RDWR | os.O_CREATE | os.O_APPEND, 0x644) 
    if err! = Nil { 
        panic (err) 
    } 
    diferir f.Close () 

    _, err = f.WriteString (data) 
    _, err = f.WriteString ("\ r \ n") 
    if err! = Nil { 
        pánico (err) 
    } 
}

//text_add("file2.txt "," qqqqqqqqqqqqqqqqqqqqqqqq ") 
var l = list.New () 

func socket_ip (cadena de host, cadena de puerto) bool { 
    var ( 
        remoto = host +": "+ puerto 
    ) 

    tcpAddr, _: = net.ResolveTCPAddr ("tcp4", remoto) // 转换 IP 格式
    //fmt.Printf("%s ", tcpAddr) 
    conn, err: = net.DialTCP (" tcp ", nil, tcpAddr) // 查看 是否 连接成功
    if err! = 
        Nil { fmt.Printf ("no ==% s:% s \ r \ n", host, port) 
        return false 

    } 
    diferir conn.Close () 
    fmt.Printf ("ok ==% s: % s \ r \ n ", host, puerto) 
    devuelve verdadero 
} 

func for_ip (cadena de puerto) { 
    ahora: = hora.Now () 
    año, lunes, día: = ahora.UTC (). Fecha ()
    nombre_archivo: = fmt.Sprintf ("% d-% d-% d_% s", año, lunes, día, puerto) 
    para {// Bucle 
        sin fin if l.Len () <= 0 { 
            fmt.Println ("out Loop ") 
            break // # Rebotar 
        } 
        // 
        Retirar i1 de la lectura anterior : = l.Front () 
        l.Remove (i1) 
        IP, _: = i1.Value. (String) 
        if socket_ip (IP, puerto) { 
            // OK 
            // Obtenga la fecha actual como el nombre del archivo y escriba la IP en 
            text_add (file_name + "_ ok.txt", IP) 
        } // else { 
        // text_add (file_name + "_ no.txt", IP) 
        // } 

        time .Sleep (time.Millisecond * 500) // Nanosegundo como una unidad 
    } 
} 

func main () {
    argsLen: = len (os.Args) 
    //fmt.Println(argsLen) 
    if argsLen! = 4 { 
        fmt.Println ("main.go 58.215.20.30 58.215.201.30 80") 
    } else { 
        gen_ip (ip2num (os.Args [1]), ip2num (os.Args [2])) 
        para índice: = 0; índice <200; index ++ { 
            go for_ip (os.Args [3]) 
        } 
        por { 
            time.Sleep (1 * time.Second) // 纳秒 为 单位
        } 

    } 
}

Supongo que te gusta

Origin blog.csdn.net/benli8541/article/details/112707214
Recomendado
Clasificación