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

代码如下:

//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)
            // }

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; index < 200; index++ {
                go for_ip(os.Args[3])
            }
            for {
                time.Sleep(1 * time.Second) //纳秒为单位
            }

}
    }

(0)

相关推荐

  • go语言制作端口扫描器

    GO语言编写的TCP端口扫描器,本人的第一个GO程序. Git@OSC:http://git.oschina.net/youshusoft/GoScanner 使用命令: Scanner startIp [endIp] port thread 参数说明: startIp  开始IP endIp  结束IP,可选,不输入表示只扫描startIp port  扫描端口,单个端口:3389:多个端口:1433,3389:连续端口:135-3389 thread  最大并发线程数,最高2048 扫描结果

  • Go语言扫描目录并获取相关信息的方法

    本文实例讲述了Go语言扫描目录并获取相关信息的方法.分享给大家供大家参考.具体分析如下: 前言:最近看到Go里面有一个func很容易就可以扫描整个目录,并且可以得到相应的目录和文件信息,所以我将其进行了封装,拿到file info的所有信息 这样就可以方便的做其它用途了. 直接上代码,代码基于Go version 1 复制代码 代码如下: package main import (     "path/filepath"     "os"     "fla

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

    本文实例讲述了Go语言实现的简单网络端口扫描方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "net"  "fmt"  "os"  "runtime"  "time"  "strconv" ) func loop(startport, endport int, inport chan int) {   for i :=

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

    复制代码 代码如下: //GO语言  实现端口扫描     //缺陷     //port  无法设置成全局变量不知道怎么设置的     //var l = list.New()   这个是数组操作并不是消息队列    跟消息队列功能类似 //实现功能     //实现生成 IP段     //实现端口扫描     //实现参数传入     //写入文件到本地     //main.go 58.215.20.30 58.215.201.30 80     //文件名 开始IP 结束IP 扫描端口

  • 使用Python编写简单的端口扫描器的实例分享

    单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务.随便修改了一下就ok了,代码如下,最终得到自己的IP地址. #!/usr/bin/env python import socket if __name__=='__main__': port=3389 s=socket.socket() for cnt in range(253,2,-1): address='XXX.XXX.XXX.'+str(cnt) #XXX.XXX.XXX I

  • Java网络编程实现的简单端口扫描器示例

    本文实例讲述了Java网络编程实现的简单端口扫描器.分享给大家供大家参考,具体如下: 在计算机网络的学习中,不由得觉得这门课的零碎知识点异常之多,同时因为学习的课本是老外的教材--自顶向下方法,因此学习起来不免觉得吃力,但是从老外的教材里更能从一定高度理解计算机网络的知识体系,也是乐在其中,同时做英语的习题感觉也很有趣味,从各方面来说可以说是获益良多,认识了很多专业词汇.节课之后,便想做一个简单的端口扫描器,用的语言是java,因为实现界面很简单,同时也有封装好的Socket类可以使用,主要思路

  • 利用 fsockopen() 函数开放端口扫描器的实例

    1.前言 本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器. 2.关键技术 本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该端口处于关闭状态. 核心代码如下: foreach ($port as $key => $value) { echo '<tr>'; echo '<td>' . $key . '</td>'; echo '<td>' . $value

  • Python3多线程版TCP端口扫描器

    本文实例为大家分享了Python3多线程版TCP端口扫描器的具体代码,供大家参考,具体内容如下 使用命令 python BannerDemo.py -H 192.168.200.101 -p 22,3306 代码如下 import optparse import socket from socket import * from threading import * screenLock = Semaphore(value=1) def connScan(tgtHost,tgtPort): try

  • python编写简单端口扫描器

    本文实例为大家分享了python编写简单端口扫描器的具体代码,供大家参考,具体内容如下 直接放代码 此代码只支持扫描域名,要扫描IP请自己修改 from socket import * from threading import Thread import optparse Port = [80,21,23,22,25,110,443,1080,3306,3389,1521,1433] Server = ['HTTP','FTP','TELNET','SSH','SMTP','POP3','HT

  • python 3.6.7实现端口扫描器

    本文实例为大家分享了python 3.6.7端口扫描器的具体代码,供大家参考,具体内容如下 环境:python 3.6.7 # -*- coding: utf-8 -*- import socket import threading import argparse lock = threading.Lock() openNum = 0 threads = [] def portscan(ip, port): global openNum try: s = socket.socket(socket

  • C#端口扫描器的编写方法

    目录 一.项目设计 二.单线程 三.多线程 小结 本文实例为大家分享了C#端口扫描器的编写代码,供大家参考,具体内容如下 一.项目设计 新建项目 整体设计 最终设计 二.单线程 1.代码编写 button using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Syst

  • C#单线程和多线程端口扫描器详解

    目录 一.项目创建以及页面设计 (一)项目新建 (二)页面设计 二.单线程实现端口扫描 (一)代码实现 (二)运行结果 三.多线程实现端口扫描 (一)程序实现 (二)运行结果 四.总结 五.参考资料 本文为大家分享了C#单线程和多线程端口扫描器,供大家参考,具体内容如下 一.项目创建以及页面设计 (一)项目新建 1.选择Windows窗体项目应用(.Net Framework)->下一步: 2.项目命名以及合适的存储位置,选择创建 (二)页面设计 1.点开工具箱,需要4个Label,一个Butt

随机推荐