GO语言实现的端口扫描器分享
//GO语言 实现端口扫描 //缺陷 //port 无法设置成全局变量不知道怎么设置的 //varl=list.New() 这个是数组操作并不是消息队列 跟消息队列功能类似
//实现功能 //实现生成IP段 //实现端口扫描 //实现参数传入 //写入文件到本地 //main.go58.215.20.3058.215.201.3080 //文件名开始IP结束IP扫描端口 //QQ29295842 希望认识更多的朋友技术交流 //QQ群367196336 go golangWEB安全开发 packagemain
import( "container/list" "fmt" "net" "os" "strconv" "strings" "time" )
funcip2num(ipstring)int{ canSplit:=func(crune)bool{returnc=='.'} lisit:=strings.FieldsFunc(ip,canSplit)//[582152030] //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]) returnip1_str_int<<24|ip2_str_int<<16|ip3_str_int<<8|ip4_str_int }
funcnum2ip(numint)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) returndata }
funcgen_ip(Aip1int,Aip2int){ index:=Aip1 forindex<Aip2{ //fmt.Println(num2ip(index)) //入队,压栈 ip_data:=num2ip(index) //fmt.Println(ip_data) l.PushBack(ip_data) index++ } }
functext_add(namestring,datastring){//向文件中写入数据 text_add("file2.txt","qqqqqqqqqqqqqqqqqqqqqqq") f,err:=os.OpenFile(name,os.O_RDWR|os.O_CREATE|os.O_APPEND,0x644) iferr!=nil{ panic(err) } deferf.Close()
_,err=f.WriteString(data) _,err=f.WriteString("\r\n") iferr!=nil{ panic(err) } }
//text_add("file2.txt","qqqqqqqqqqqqqqqqqqqqqqq") varl=list.New()
funcsocket_ip(hoststring,portstring)bool{ var( remote=host+":"+port )
tcpAddr,_:=net.ResolveTCPAddr("tcp4",remote)//转换IP格式 //fmt.Printf("%s",tcpAddr) conn,err:=net.DialTCP("tcp",nil,tcpAddr)//查看是否连接成功 iferr!=nil{ fmt.Printf("no==%s:%s\r\n",host,port) returnfalse
} deferconn.Close() fmt.Printf("ok==%s:%s\r\n",host,port) returntrue }
funcfor_ip(portstring){ now:=time.Now() year,mon,day:=now.UTC().Date() file_name:=fmt.Sprintf("%d-%d-%d_%s",year,mon,day,port) for{//死循环 ifl.Len()<=0{ fmt.Println("跳出循环") break//#跳出 } //出队 从前读取 i1:=l.Front() l.Remove(i1) IP,_:=i1.Value.(string) ifsocket_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)//纳秒为单位 } }
funcmain(){ argsLen:=len(os.Args) //fmt.Println(argsLen) ifargsLen!=4{ fmt.Println("main.go58.215.20.3058.215.201.3080") }else{ gen_ip(ip2num(os.Args[1]),ip2num(os.Args[2])) forindex:=0;index<200;index++{ gofor_ip(os.Args[3]) } for{ time.Sleep(1*time.Second)//纳秒为单位 }
} }