关闭页面特效

Golang实现TCP端口扫描器

简易版

package main func worker(ports,results chan int){ for p:=range ports{ address:=fmt.Sprintf("bilibili.com:%d",p) conn,err:=net.Dial("tcp",address) if err!=nil{ result<-0 continue } conn.Close() results<-p } } func main(){ ports:=make(chan int,100) results:=make(chan int) var openports []int for i:=0;i<=cap(ports);i++{ go worker(ports,results) } go func(){ for i:=1;i<=1024;i++{ ports<-i } }() for i:=0;i<1024;i++{ ports:=<-results if port!=0{ openports=append(openports,port) } } close(ports) close(results) sort.Ints(openports) for _,port:=range openports{ fmt.Prinf("%d open\n",port) } }

能够解析IP 端口字符串的TCP全连接扫描器

/scanner/tcp-scanner.go

package scanner func Connect(ip string,port int)(net.Conn,err){ address:=fmt.Sprintf("%v:%v",ip,port) conn,err:=net.DialTimeout("tcp",address,1*time.Second) defer func(){ if conn!=nil{ conn.Close() } }() return conn,err }

util/util.go

package util func GetPorts(selection string)([]int,error){ ports:=make([]int,0) if selections==""{ return ports,nil } ranges:=strings.Split(selection,",") for _,r:=range ranges{ r=strings.TrimSpace(r) if strings.Contains(r,"-"){ parts:=strings.Split(r,"-") if len(parts)!=2{ return nil,fmt.Errorf("Invalid Port Selection segment :'%s'",r) } start,err:=strconv.Atio(parts[0]) if err!=nil{ return nil,fmt.Errorf("Invalid port number:'%s'",parts[0]) } end,err:=strconv.Atio(parts[1]) if err!=nil{ return nil,fmt.Errorf("Invalid port number:'%s'",ports[1]) } if start>end{ return nil,fmt.Errorf("Invalid port range:%d-%d",start,end) } for i:=start;i<=end;i++{ ports=append(ports,i) } }else{ if port,err:=strconv.Atio(r);err!=nil{ return nil,fmt.Errorf("Invalid port number:'%s'",r) }else{ ports=append(ports,port) } } } return ports,nil } func GetIpList(ips string)([]net.IP,error){ addressList,err:=iprange.ParseList(ips) if err!=nil{ return nil,err } list:=addrssList.Expand() return list,err }

main.go

package main func main(){ if len(os.Args)==3{ ipList:=os.Args[1] portsList:=os.Args[2] ips,_:=util.GetIpList(iplist) ports,_:=util.GetPortList(portsList) for _,ip :=range ips{ for_,port:=range ports{ _,err:=scanner.Connect(ip.String(),port) if err!=nil{ continue } fmt.Printf("ip:%v,port:%v is open\n",ip,port) } } }else{ fmt.Printf("%v iplist port \n",os.Arg[0]) } }

__EOF__

作  者WeberBon
出  处https://www.cnblogs.com/Weber-security/p/17347934.html
关于博主:185猛男
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   Weber·Bon  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-04-23 木马的制作|使用木马进行攻击
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示