我在本地电脑的 8080 端口上运行一个服务器。我可以打开浏览器执行http://本地主机:8080并且它有效。
我将把我的公共 IP 称为 PUBLIC_IP,将私有/内部 IP 称为 PRIVATE_IP。
在浏览器(在服务器 PC 上运行)中,我也可以执行http://公共 IP:8080和http://私人IP:8080并且都有效。
我在路由器软件中设置端口转发如下:
TCP 外部端口 8080 >> 内部端口 8080 到我的 PRIVATE_IP 设备。
当我访问 canyouseeme.org 并输入我的 PUBLIC_IP 和 8080 时,我得到:
“错误:我无法在 PUBLIC_IP 端口 (8080) 上看到您的服务”
我查看了路由器日志并看到:
[远程 LAN 访问] 从 52.202.215.126:55574 到 INTERNAL_IP:8080
我假设 52.202.215.126 是 canyouseeme.org 服务器的 IP 地址。
但它似乎使用端口 55574 - 而不是 8080。并且它也会根据每次请求而改变。
这就是路由器看到的外部端口,对吗?
但看起来请求已经到达路由器 - 只是没有到达我的服务器 - 被阻止了?
我已关闭防火墙。
任何帮助均感激不尽。
这是tcldump
日志 - 在服务器 PC 上运行 - 因此流量正在到达服务器 PC。
Fulls-Mac-mini:conf mini$ sudo tcpdump 'tcp port 8080'
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
16:08:26.451497 IP ec2-52-202-215-126.compute-1.amazonaws.com.48092 > 192.168.1.12.http-alt: Flags [S], seq 3119124296, win 26883, options [mss 1460,sackOK,TS val 298290090 ecr 0,nop,wscale 7], length 0
16:08:26.451570 IP 192.168.1.12.http-alt > ec2-52-202-215-126.compute-1.amazonaws.com.48092: Flags [S.], seq 449444859, ack 3119124297, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 683632630 ecr 298290090,sackOK,eol], length 0
16:08:27.449719 IP ec2-52-202-215-126.compute-1.amazonaws.com.48092 > 192.168.1.12.http-alt: Flags [S], seq 3119124296, win 26883, options [mss 1460,sackOK,TS val 298290340 ecr 0,nop,wscale 7], length 0
16:08:27.449751 IP 192.168.1.12.http-alt > ec2-52-202-215-126.compute-1.amazonaws.com.48092: Flags [S.], seq 449444859, ack 3119124297, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 683633624 ecr 298290340,sackOK,eol], length 0
16:08:28.453107 IP 192.168.1.12.http-alt > ec2-52-202-215-126.compute-1.amazonaws.com.48092: Flags [S.], seq 449444859, ack 3119124297, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 683634624 ecr 298290340,sackOK,eol], length 0
16:08:29.453652 IP ec2-52-202-215-126.compute-1.amazonaws.com.48092 > 192.168.1.12.http-alt: Flags [S], seq 3119124296, win 26883, options [mss 1460,sackOK,TS val 298290841 ecr 0,nop,wscale 7], length 0
16:08:29.453700 IP 192.168.1.12.http-alt > ec2-52-202-215-126.compute-1.amazonaws.com.48092: Flags [S.], seq 449444859, ack 3119124297, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 683635624 ecr 298290841,sackOK,eol], length 0
我的内部 IP 地址是 192.168.1.12
该日志的结果是https://www.canyouseeme.org/使用我的公共 IP 地址 + 8080。
当我查看 Tomcat 日志访问文件时,没有条目。因此,要么是拒绝连接(并且不在日志文件中列出),要么是无法进入 Tomcat。
答案1
否,连接尝试是正确的。
每个 TCP 数据包有两个端口:源和目标,也可以称为本地和远程。(因此,连接不会“通过”端口;而是从发送方的一个端口到接收方的另一个端口。)
“源”端口几乎总是随机选择的(以确保每个连接都有一个唯一的端口一对)。
您在 URL、端口转发规则等中看到的端口几乎总是“目标”端口。(这适用于两个都执行 NAT 时的“外部”和“内部”端口。)您已经转发了端口 8080,并且 CanYouSeeMe 也正在与您这边的端口 8080 建立连接 – 所以这完全没问题。
答案2
我将 Tomcat 服务器端口改为 8081 就可以了!
不确定为什么 8080 不工作。