GO言語はポートスキャンを実現します

// GO言語はポートスキャンを実装します
//欠陥
//ポートをグローバル変数として設定できません。設定方法がわかりません
// var l = list.New()これは配列操作であり、メッセージキューではありません、これはメッセージキュー関数に似ています

//実装関数
// IPセグメント生成を
実装します//
ポートスキャンを実装します
//パラメータ
入力を実装します//ファイルをローカルに書き込みます//main.go 58.215.20.30 58.215.201.30 80 
//ファイル名前開始IP終了IPスキャンポート
// QQ29295842希望もっと多くの友達知り合う技術交流// QQグループ367196336go golangWEBセキュリティ開発
//ブログhttp://hi.baidu.com/alalmnpackage 
main 

import(
    "container / list " 
    " fmt " 
    " net " 
    " os " 
    " strconv " 
    " strings " 
    " time " 

func ip2num(ip string)int {
    lisit:= strings.FieldsFunc(ip、canSplit)// [58 215 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)string { 
    ip1_int:=(num&0xff000000)>> 24 
    ip2_int:=(num&0x00ff0000)>> 16 
    ip3_int:=(num&0x0000ff00)>> 8 
    ip4_int:= num&0x000000ff 
    / /fmt.Println(ip1_int)data:= 
    fmt.Sprintf( "%d。%d。%d。%d"、ip1_int、ip2_int、ip3_int、ip4_int) 
func gen_ip(Aip1 int、
}

    for index <Aip2 { 
        //fmt.Println(num2ip(index))//
        入队、圧栈
        ip_data:= num2ip(index)
        // 
        fmt.Println(ip_data)l.PushBack(ip_data)
        index ++ 
    } 
} 

func text_add( name string、data string){//向文件中写入数データ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)
    } 
    defer f.Close()

    _、err = f.WriteString(data)
    _、err = f.WriteString( "\ r \ n")
    if err!= nil { 
        panic(err)
    } 
}

//text_add("file2.txt "、" qqqqqqqqqqqqqqqqqqqqqqq ")
var l = list.New()

func socket_ip(host string、port string)bool { 
    var(
        remote = host +": "+ port 
    )

    tcpAddr、_:= net.ResolveTCPAddr( "tcp4"、remote)//変換换IP格式// fmt.Printf( "%
    s"、tcpAddr)
    conn、err:= net.DialTCP( "tcp"、nil、tcpAddr)//查番成功iferr 
    != nil { 
        fmt.Printf( "no ==%s:%s \ r \ n"、host、port)
        return false 

    } 
    defer conn.Close()
    fmt.Printf( "ok ==%s: %s \ r \ n "、host、port)
    return true 
} 

func for_ip(port string){ 
    now:= time.Now()Now()
    年、月、日:= now.UTC()。Date()
    file_name:= fmt.Sprintf( "%d-%d-%d_%s"、year、mon、day、port)
    for {//
        エンドレスループifl.Len()<= 0 { 
            fmt.Println( "out Loop ")
            break //#Bounce out 
        } 
        //前回の読み取りから
        i1デキューします:= l.Front()
        l.Remove(i1)
        IP、_:= i1.Value。(string)
        if socket_ip(IP、port) { 
            // OK 
            //現在の日付をファイル名として取得し、IPを
            text_add(file_name + "_ ok.t​​xt"、IP)に書き込みます
        } // else { 
        // text_add(file_name + "_ no.txt"、IP)
        // } 

        time .Sleep(time.Millisecond * 500)//単位としてのナノ秒
    } 
} 

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]))
        for index:= 0; インデックス<200; index ++ { 
            go for_ip(os.Args [3])
        } 
        for { 
            time.Sleep(1 * time.Second)//纳秒是単位
        } 

    } 
}

おすすめ

転載: blog.csdn.net/benli8541/article/details/112707214