就剩
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)
}
}
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:48 +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 包 |