最近有个小项目的需要,使用golang写了个端口扫描工具,不得不说golang的效率确实比python快的太多了。在使用一段时间golang之后,感觉有三个方面是优于python的:
//首先从命令行中读取线程数和配置文件路径
//从配置文件中解析出ip和port
//配置文件格式为
// [ip]
// 127.0.0.1
// [port]
// 22
// 36000
// 56000
// 3306
//根据开启的线程数对指定ip和端口进行tcp连接
//如果端口开启,把ip:port按照格式返回
func Scanner(configFile string, functionid string, sendInfoFile string,limit int){
runtime.GOMAXPROCS(runtime.NumCPU())
data, err := ioutil.ReadFile(configFile)
portlist := make([]string,0,10)
if err != nil{
log.Fatal(err)
panic(err)
}
ip_index := bytes.Index(data,[]byte("[ip]"))
port_index := bytes.Index(data,[]byte("[port]"))
if ip_index < 0{
Info.Println("文件格式有误: missing [ip]")
return
}
if port_index <0{
portlist = append(portlist,"22")
portlist = append(portlist,"36000")
portlist = append(portlist,"56000")
portlist = append(portlist,"3306")
}else{
reg_port := regexp.MustCompile(`\d+`)
var ports [][]byte
if ip_index>port_index{
ports = reg_port.FindAll(data[:ip_index],-1)
}else{
ports = reg_port.FindAll(data[port_index:],-1)
}
for _,v := range(ports){
portlist = append(portlist,string(v))
}
}
reg_ip := regexp.MustCompile(`((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))`)
ips := reg_ip.FindAll(data,-1)
input := make(chan []byte, len(ips))
result := make(chan string, len(ips))
defer close(input)
defer close(result)
for _, v := range(ips){
input <- v
}
//控制多少并发
for i:=0; i<limit;i++{
//这个时候可以启动扫描函数
go ScanPort(portlist,input,result)
}
for i :=0; i< len(ips);i++{
//将扫描的结果输出
ip_result,ok:= <-result
if !ok {
break;
}
}
}
func ScanPort(portlist []string,intput chan []byte,result chan string ) {
for{
task,ok := <-intput
if !ok{
return
}
ip := string(task)
Info.Println("scaning ",ip,"port",portlist)
port_str :=""
for i:=0; i<len(portlist); i++{
_, err := net.DialTimeout("tcp", ip+":"+portlist[i], time.Second*3)
if err != nil{
continue
}
port_str+=portlist[i]+" "
}
if len(port_str) >0{
//说明有打开的端口
// Info.Println(ip+":"+port_str+"open")
result <- ip+"----"+"1"+"----"+"open port:"+port_str
}else{
result <- ip+"----"+"0"+"----"+"ok"
}
}
}
最后
关注公众号:七夜安全博客
- 回复【1】:领取 Python数据分析 教程大礼包
- 回复【2】:领取 Python Flask 全套教程
- 回复【3】:领取 某学院 机器学习 教程
- 回复【4】:领取 爬虫 教程
- 回复【5】:领取 编译原理 教程
- 回复【6】:领取 渗透测试 教程
- 回复【7】:领取 人工智能数学基础 教程
golang高性能端口扫描
标签:bre 端口扫描 config文件 out 人工智 指定 strong 参数说明 exp
原文地址:https://www.cnblogs.com/qiyeboy/p/10133716.html