加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Go语言实现的简单网络端口扫描方法

发布时间:2020-12-16 19:34:29 所属栏目:大数据 来源:网络整理
导读:本篇章节讲解Go语言实现的简单网络端口扫描方法。供大家参考研究。具体实现方法如下: 复制代码 代码如下: package main import ( "net" "fmt" "os" "runtime" "time" "strconv" ) func loop(startport,endport int,inport chan int) { for i := sta

本篇章节讲解Go语言实现的简单网络端口扫描方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
package main
import (
 "net"
 "fmt"
 "os"
 "runtime"
 "time"
 "strconv"
)

func loop(startport,endport int,inport chan int) {
  for i := startport; i <= endport; i++{
   inport <- i
  }
}

func scanner(inport,outport,out chan int,ip net.IP,endport int){
 for{
  in := <- inport
  //fmt.Println(in)
  tcpaddr := &net.TCPAddr{ip,in}
  conn,err := net.DialTCP("tcp",nil,tcpaddr)
  if err != nil {
   outport <- 0
  }else{
   outport <- in
  }
  conn.Close()
  if in == endport{
   out <- in
  }
 }
}

func main() {
 starttime := time.Now().Unix()
 runtime.GOMAXPROCS(4)
 inport := make(chan int)
 outport := make(chan int)
 out := make(chan int)
 collect := []int{}
 if len(os.Args) != 4 {
  fmt.Println("Usage: scanner.exe IP startport endport")
  fmt.Println("Endport must be larger than startport")
  os.Exit(0)
 }
 ip := net.ParseIP(os.Args[1])
 if(os.Args[3] < os.Args[2]) {
  fmt.Println("Usage: scanner IP startport endport")
  fmt.Println("Endport must be larger than startport")
  os.Exit(0)
 }
 startport,_:= strconv.Atoi(os.Args[2])
 endport,_ := strconv.Atoi(os.Args[3])
 go loop(startport,endport,inport)
 for{
  select {
   case <-out:
    fmt.Println(collect)
    endtime := time.Now().Unix()
    fmt.Println("The scan process has spent ",endtime-starttime,"second")
    os.Exit(0)
   default:
    go scanner(inport,out,ip,endport)
    port := <- outport
    
    if port != 0{
     collect = append(collect,port)
    }
  }  
 }
}

希望本文所述对大家的Go语言程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读