
就剩
25跟110端口 是开放的 ,其他从 1 到 65535 全都是封锁的
我网上抄了个 golang 程序测试的
package main import ( "flag" "fmt" "net" "runtime" "time" ) // CheckIsOpen 检查端口是否打卡 func CheckIsOpen(domain strig, 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) } } 1 ranaanna 2023-09-05 22:14:47 +08:00 奇怪的,最应该屏蔽的 25 和 110 反而是开的,说不通的 |
2 lemon6 2023-09-05 23:09:00 +08:00 我这里一切正常啊 |
3 asuraa OP |
4 dude4 2023-09-06 09:33:15 +08:00 光猫拨号?有些光猫防火墙是 BUG 的,你懂 |
5 szdosar 2023-09-06 11:21:44 +08:00 我怀疑可能是由于线程并发导致的, 当并发扫描大量端口时, 某些端口的结果可能会被其他线程的输出所覆盖, 或者由于某种原因被忽略。 你试试把线程数降低点, 比如 5 线程? |
6 szdosar 2023-09-06 11:22:8 +08:00 另外,你的超时毫秒改成 400-500 毫秒看看? |
7 yinmin 2023-09-06 12:24:40 +08:00 linux 测试 TCP 端口的指令:nc -vz -w 2 [ip] [port] |
8 asuraa OP @yinmin 这个我也搞了个脚本测试 也是全封 脚本如下: #!/bin/bash for port in {1..65535}; do echo -n "TCP $port: " result=$(nc "1.1.1.1" "$port" -w 1 -v 2>&1 < /dev/null) if [ "$?" -eq 0 ]; then echo "Open" echo "$port" >> success.txt continue fi if [[ "$result" == *refused* ]]; then echo "Closed" fi if [[ "$result" == *time* ]]; then echo "$port" >> block_list.txt echo "BLOCKED" fi done @dude4 不是光猫拨号 我是爱快软路由 pppoe 拨号 我换光猫是为了突破 1G 宽带上限 以前电信用的就是这个没啥问题啊 |
9 ranaanna 2023-09-06 21:01:14 +08:00 1. 非公网 IP ?但是不能解释为什么 25 和 110 是开的 2. 在内网测的?很多时候会出现这样的情况:内网的设备使用外部 IP 地址相互通信。这种情况被形象地叫做发夹网络( hairpinning )。通常路由器软件在做 port forwarding 的时候会考虑这种情况作相应的地址转换(叫做 NAT loopback, 或 NAT reflection, 或 harpin NAT )。也有可能爱快默认没有开启,或需要额外的配置?这也可解释为什么 25 和 110 是开的(因为是爱快开的,而其他端口因为是在内网用外部 ip 访问,但又没有 harping NAT ,所以都不通) |
10 asuraa OP |
13 ranaanna 2023-09-08 11:03:31 +08:00 @luodaoyi 思路对了,运营商没有道理给你公网 IP 同时又屏蔽所有其他端口同时又开放 25 和 110 。所以一定是你的爱快自己开了 25 和 110 ,或者 DMZ 到了开了 25 和 110 内网设备。如果是后者,记得需要把 port forwarding 到其他设备的端口排除在 DMZ 外,不然是不行的。不知道爱快又没有相应的设置选项 |
15 AS58453 2023-09-08 12:47:43 +08:00 不可能封闭所有端口,不然正常的上网都出不去了呀。普通的网络请求都是高位端口。 |
18 nightcc 2023-09-08 19:17:18 +08:00 via Android 很奇怪 首先怀疑是路由的问题,可以检查一下端口转发是否正常(比如把 wan 连到另一个路由上从外部扫描),或者直接用路由监听某个端口 其次怀疑扫描的问题,是不是扫的频率太高才被防火墙拦的(运营商的防火墙,或者自己路由的防火墙),可以单独扫几个端口试试,再试试用 nmap 扫,它可以区分 closed 和 filtered ,因为一般防火墙拒绝后会回 icmp 包 |