Go 高併發埠掃瞄工具

2021-10-21 02:38:31 字數 2845 閱讀 3115

本go 先讀取yaml格式的ip列表,先對ip進行ping一次,如果不通,就不做掃瞄了。掃瞄結果儲存在result_.log 檔案

yaml 格式栗子:

ip:

- 192.168.1.241

- 192.168.1.242

- 192.168.1.243

- 192.168.1.244

- 192.168.1.240

直接上**

package main

import (

"bytes"

"encoding/binary"

"flag"

"fmt"

"io/ioutil"

"log"

"net"

"os"

"strconv"

"strings"

"time"

"gopkg.in/yaml.v2"

)var icmp icmp

//定義ping 輸入型別

type icmp struct

//掃瞄位址

var ipaddrs chan string = make(chan string)

//掃瞄結果

var result chan string = make(chan string)

//var presult chan string = make(chan string)

//執行緒數

var thread chan int = make(chan int)

var nowthread int

//關閉程式

var clo chan bool = make(chan bool)

//定義ip型別

type ip struct

//儲存結果

func writeresult()

defer fout.close()

s, ok := <-result

for ok

//通知程序退出

clo <- true

}//根據執行緒引數啟動掃瞄線程

func runscan()

} //等待執行緒終止

for <-thread == 0 }}

//掃瞄線程

func scan(threadid string)

s, ok = <-ipaddrs

} fmt.println("[thread-" + threadid + "] end")

thread <- 0

}//載入ip配置檔案

func openfile() string

var p ip

if err = yaml.unmarshal(bytes, &p); err != nil

ips = p.iplist

return ips

}//處理引數

func processflag(arg string)

if len(tmpports) >= 2

} else

for i := 0; startport+i <= endport; i++

} else

} }t, err := strconv.atoi(os.args[3])

//t, err := arg[3]

if err != nil

//最大執行緒5048

if t < 1 else if t > 5048

//傳送啟動執行緒數

thread <- t

//生成掃瞄位址列表

ips := openfile()

il := len(ips)

for i := 0; i < il; i++

} else

} close(ipaddrs)

}//isping 檢查網路函式

func isping(ip string) bool

_, err = conn.write(buffer.bytes())

if err != nil

conn.setreaddeadline(time.now().add(time.second * 2))

num, err := conn.read(recvbuf)

if err != nil

conn.setreaddeadline(time.time{})

if string(recvbuf[0:num]) != ""

return false

}//check 輸入資料

func checksum(data byte) uint16

if length > 0

sum += (sum >> 16)

return uint16(^sum)

}//執行程式

func main()

//獲取引數

args := make(string, 0, 4)

for i := 0; i < flag.narg(); i++

//啟動掃瞄線程

go runscan()

//啟動結果寫入執行緒

go writeresult()

//引數處理

processflag(args)

//等待退出指令

<-clo

fmt.println("exit")

}

編譯好後執行。

用法:./pscanport ip.yaml 1-65535 2000

引數說明 1:ip列表檔案,2:埠範圍,3:開啟併發數

這裡有編譯好的包。

Python開發埠掃瞄器

首先是最常用的埠掃瞄器 雖說有nmap等強大的工具,不過如果由於條件限制無法安裝nmap呢?我這個指令碼寫的比較簡單,預設掃瞄1 65535全部的埠 實際的話,可以根據需要自己修改指令碼來實現定製化掃瞄 coding utf 8 author yiqing import socket import ...

TCPing 埠掃瞄工具

描述在本地主機和遠端主機之間,tcping可以測試出執行tcp三次握手所需的時間 syn,syn ack,ack 最終ack傳送時間不包括在內,只有最少的時間才能將其丟棄在近端的電線。概要 tcping tdsvf46 i interval n times w interval b n r time...

Go埠掃瞄器

這次呢,咱們來實現乙個簡單的tcp埠掃瞄器!也來體驗一下黑客的風采!我們在使用tcp進行連線時,需要知道對方機器的ip port 連線成功的話,流程如下。有正常,就有失敗,如果被連線方關閉的話,流程如下。還有一種可能是,埠開放,但是 防火牆攔截,流程如下。本質理解之後,就可以開始擼 了。在go中,我...