源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-04-22 06:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Go语言实现的简单网络端口扫描方法
本文实例讲述了Go语言实现的简单网络端口扫描方法。分享给大家供大家参考。具体实现方法如下:
[u]复制代码[/u] 代码如下:
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, outport, out, ip, endport)     port := <- outport          if port != 0{      collect = append(collect, port)     }   }    } }
希望本文所述对大家的Go语言程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部