• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > GO语言实现的端口扫描器分享

GO语言实现的端口扫描器分享

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了go语言,go语言环境搭建,go语言程序设计,let it go 25种语言,go语言教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

//GO语言  实现端口扫描
    //缺陷
    //port  无法设置成全局变量不知道怎么设置的
    //var l = list.New()   这个是数组操作并不是消息队列    跟消息队列功能类似

    //实现功能
    //实现生成 IP段
    //实现端口扫描
    //实现参数传入
    //写入文件到本地
    //main.go 58.215.20.30 58.215.201.30 80
    //文件名 开始IP 结束IP 扫描端口
    //QQ29295842   希望认识更多的朋友技术交流
    //QQ群367196336   go   golang WEB安全开发
    package main

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

    func ip2num(ip string) int {
        canSplit := func(c rune) bool { return c == '.' }
        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)
        return data
    }

    func gen_ip(Aip1 int, Aip2 int) {
        index := Aip1
        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) //查看是否连接成功
        if err != 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()
        year, mon, day := now.UTC().Date()
        file_name := fmt.Sprintf("%d-%d-%d_%s", year, mon, day, port)
        for { //死循环
            if l.Len() <= 0 {
                fmt.Println("跳出循环")
                break //#跳出
            }
            // 出队  从前读取
            i1 := l.Front()
            l.Remove(i1)
            IP, _ := i1.Value.(string)
            if socket_ip(IP, port) {
                //OK
                //获取当前  日期作为文件名  在把IP写入进去
                text_add(file_name+"_ok.txt", IP)
            } //else {
            //  text_add(file_name+"_no.txt", IP)
     

您可能想查找下面的文章:

  • 利用Go语言搭建WebSocket服务端方法示例
  • Go语言字典(map)用法实例分析【创建,填充,遍历,查找,修改,删除】
  • Go语言中更优雅的错误处理
  • Go语言实现的排列组合问题实例(n个数中取m个)
  • Go语言Cookie用法分析
  • GO语言运行环境下载、安装、配置图文教程
  • go语言文件正则表达式搜索功能示例
  • Go语言正则表达式用法实例小结【查找、匹配、替换等】
  • Go语言正则表达式示例
  • Go语言中三种不同md5计算方式的性能比较

相关文章

  • 深入剖析Go语言编程中switch语句的使用
  • 利用Go语言搭建WebSocket服务端方法示例
  • Go中map数据类型3点小知识
  • Go语言之自定义集合Set
  • 使用Go语言实现微信公众平台
  • Go语言中反射的正确使用
  • go语言base64用法实例
  • GO语言实现批量压缩图片和水印
  • GO语言映射(Map)用法分析
  • GO语言利用K近邻算法实现小说鉴黄

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Golang的os标准库中常用函数的整理介绍
    • GO语言数组和切片实例详解
    • go语言实现字符串base64编码的方法
    • Go语言编程中判断文件是否存在是创建目录的方法
    • Go语言中Select语句用法实例
    • go语言使用pipe读取子进程标准输出的方法
    • Go语言实现汉诺塔算法
    • Golang正整数指定规则排序算法问题分析
    • Golang算法之田忌赛马问题实现方法分析
    • GO 语言学习指南

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有