就剩
25
跟110
端口 是开放的 ,其他从 1 到 65535 全都是封锁的
我网上抄了个 golang 程序测试的
package main
import (
"flag"
"fmt"
"net"
"runtime"
"time"
)
// CheckIsOpen 检查端口是否打卡
func CheckIsOpen(domain string, timeout time.Duration, portChan chan int, exitChan chan bool, openPort []int, rescan chan int) {
for {
port, ok := <-portChan
if !ok {
break
}
socket := fmt.Sprintf("%v:%v", domain, port)
_, err := net.DialTimeout("tcp", socket, timeout) //发起握手操作 有回应 说明打开了端口 并且做了延时 超过一定时间 直接说明未打开
defer func() {
recover()
}()
if err == nil {
rescan <- port
fmt.Println(socket, " 打开")
openPort = append(openPort, port)
} else {
//fmt.Println(socket, " 关闭")
}
}
exitChan <- true
}
func main() {
cores := runtime.NumCPU()
runtime.GOMAXPROCS(cores - 1)
domainP := flag.String("domain", "", "请输入指定的 IP 地址")
flag.Parse()
domain := *domainP
if domain == "" {
fmt.Println("请输入 IP 地址")
return
}
openPort := make([]int, 10)
exitChan := make(chan bool)
portChan := make(chan int)
resChan := make(chan int, 100)
go func() {
for i := 0; i < 65535; i++ {
portChan <- i
}
close(portChan) //及时关闭管道 使用 for 循环取出时才不会等待
}()
timeout := time.Millisecond * 200
for i := 0; i < 18; i++ {
go CheckIsOpen(domain, timeout, portChan, exitChan, openPort, resChan)
}
for i := 0; i < 18; i++ {
<-exitChan
}
close(exitChan)
close(resChan)
fmt.Println("开启的端口号:")
for {
port, res := <-resChan
if !res {
break
}
fmt.Println(port)
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.