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

作者:不吃皮蛋 时间:2024-04-26 17:23:06 

本文实例讲述了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, outport, out, ip, endport)
    port := <- outport
    
    if port != 0{
     collect = append(collect, port)
    }
  }  
 }
}

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

标签:Go语言,网络,端口,扫描
0
投稿

猜你喜欢

  • pygame实现俄罗斯方块游戏(基础篇2)

    2022-05-24 00:09:17
  • golang 字符串切片去重实例

    2024-02-20 04:00:53
  • django反向解析和正向解析的方式

    2021-11-21 11:03:49
  • Python标准库之typing的用法(类型标注)

    2021-09-27 01:25:24
  • 深入理解python 生成器、迭代器、动态新增属性及方法

    2023-11-13 03:04:32
  • Vue.js中的图片引用路径的方式

    2024-05-09 15:28:10
  • python 七种邮件内容发送方法实例

    2022-01-13 21:06:38
  • Python处理命令行参数模块optpars用法实例分析

    2021-07-20 05:27:36
  • Python爬取门户论坛评论浅谈Python未来发展方向

    2021-10-26 19:09:12
  • Python3.5内置模块之time与datetime模块用法实例分析

    2023-11-02 23:25:35
  • Python字典的基础操作

    2023-02-27 06:25:18
  • 详解python使用Nginx和uWSGI来运行Python应用

    2023-07-25 20:40:55
  • 怎样缩小SQL Server数据库的日志文件

    2009-01-15 13:08:00
  • Python实现文字pdf转换图片pdf效果

    2021-03-10 23:20:03
  • python 星号(*)的多种用途

    2021-08-13 06:16:27
  • 另类读写:ACCESS中Field对象的标题属性

    2008-11-28 16:47:00
  • 微软建议的ASP性能优化28条守则(2)

    2008-02-22 17:02:00
  • 超详细注释之OpenCV操作图像平移转换

    2022-08-14 19:29:38
  • Python实现随机生成任意数量车牌号

    2022-08-04 04:53:17
  • Python实现钉钉发送报警消息的方法

    2022-11-18 06:06:44
  • asp之家 网络编程 m.aspxhome.com