关于内网穿透的问题

newpeng 2017-07-18 02:58:22
刚牵了电信网络,很扯蛋电信不给分配公网IP,没法做端口映射。就想打算自己做一个内网穿透工具【用别的不是卡就是怕不靠谱】。研究了一下内网穿透原理,自己用delphi来实现。发现总是连不上对方。

根据从网上找的内网TCP穿透资料,穿透过程如下:

clientA 以指定的本地端口LocalPortA访问服务器[同时开启侦听此端口的服务],服务器记录下clientA 外网IPA和外网PortA

clientB 以指定的本地端口LocalPortB访问服务器[同时开启侦听此端口的服务],服务器记录下clientB 外网IPB和外网PortB

服务器告诉clientA 【IPB,PortB】,告诉clientB 【IPA,PortA】,[此时有的资料说服务器要与A B 断开]


clientA绑定端口LocalPortA试图连接 IPB,PortB,clientB绑定端口LocalPortB试图连接 IPA,PortA,在双方外网路由上一旦产生访问记录,连接就可以建立起来。

我反复试了好多次,总是无法连接上对方。不知道问题出在哪里。网上又有资料说有的路由器支持穿透有的路由器不支持穿透。

后来又搜关于 teamviewer 的内网穿透原理资料,有人说,如果双方想要直接连接,须得有一方直接在互联网上【就是有独立的IP】;如果两方都在路由器后面,则teamviewer要借用服务器转发流量。如果这样转发,那还穿透什么?



哪位能指点一二?
...全文
3390 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
advance_coder 2019-11-09
  • 打赏
  • 举报
回复
公网IP是不可能给你的,你需要自己单独购买。 TCP打洞建议不要去研究了,他本身就是tcp自身的漏洞,成功率很低。 a 跟服务器c连上,b也跟服务器c连上,c把自己跟b连上的套接字信息给a,C再断开与b的链接,否则a无法向b打洞。这个断开的时间断段,a要充分利用上,超时b认为与服务器c断开链接,那么c给a的套接字信息失效,b不认了,就无法成功打洞。 c要是没断开与b的链接,a还是无法打洞。否则就是TCP的bug了。 所以了解原理后,就知道打洞是什么一回事了!切记不要盲目崇拜黑技术。 一个健康稳定的系统里面不会用到打洞的。
小锦鲤- 2019-10-18
  • 打赏
  • 举报
回复
可以考虑一下小蚂蚁内网穿透 永久免费,送的有免费二级域名 支持tcp http 网址www.xiaomy.net 可以绑定自己的域名
码力 2018-05-15
  • 打赏
  • 举报
回复
Holer只需配置一个Access Key就可以了
https://github.com/Wisdom-Projects/holer
  • 打赏
  • 举报
回复
newpeng 2017-07-31
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
[quote=引用 7 楼 newpeng 的回复:] [quote=引用 6 楼 DelphiGuy 的回复:] 不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
这个我知道,我想要问的是:这种情况下,是不是不能直接打孔,只能通过服务器转发?我说的服务器转发不是指刚开始建立握手连接,而是在通过服务器建立连接之后,就不再需要服务器【除非双方网络出现变化或者断开什么的异常】。这样不用消耗服务器的流量。 如果双方都在路由器后面条件下,必须通过服务器中转所有流量,那穿透打孔就没有意义了,就不是我所理解的打孔模式了。[/quote] 双方都隐藏在路由器/防火墙后面,不论使用TCP还是UDP都穿透不了,只能通过服务器转发(服务器一直要有效)。 [/quote] 抱歉,本来后面那个60分是给你的。另外,我以前记得csdn有这种功能:用户多次回复时,给过一次分是不能再给分的,怎么现在规则变了?
newpeng 2017-07-30
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
[quote=引用 7 楼 newpeng 的回复:] [quote=引用 6 楼 DelphiGuy 的回复:] 不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
这个我知道,我想要问的是:这种情况下,是不是不能直接打孔,只能通过服务器转发?我说的服务器转发不是指刚开始建立握手连接,而是在通过服务器建立连接之后,就不再需要服务器【除非双方网络出现变化或者断开什么的异常】。这样不用消耗服务器的流量。 如果双方都在路由器后面条件下,必须通过服务器中转所有流量,那穿透打孔就没有意义了,就不是我所理解的打孔模式了。[/quote] 双方都隐藏在路由器/防火墙后面,不论使用TCP还是UDP都穿透不了,只能通过服务器转发(服务器一直要有效)。 [/quote] 这样?我还以为能穿透呢,如此说来并没有所谓的打孔穿透技术了。
  • 打赏
  • 举报
回复
引用 7 楼 newpeng 的回复:
[quote=引用 6 楼 DelphiGuy 的回复:] 不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
这个我知道,我想要问的是:这种情况下,是不是不能直接打孔,只能通过服务器转发?我说的服务器转发不是指刚开始建立握手连接,而是在通过服务器建立连接之后,就不再需要服务器【除非双方网络出现变化或者断开什么的异常】。这样不用消耗服务器的流量。 如果双方都在路由器后面条件下,必须通过服务器中转所有流量,那穿透打孔就没有意义了,就不是我所理解的打孔模式了。[/quote] 双方都隐藏在路由器/防火墙后面,不论使用TCP还是UDP都穿透不了,只能通过服务器转发(服务器一直要有效)。
lyhoo163 2017-07-27
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
[quote=引用 7 楼 newpeng 的回复:] [quote=引用 6 楼 DelphiGuy 的回复:] 不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
这个我知道,我想要问的是:这种情况下,是不是不能直接打孔,只能通过服务器转发?我说的服务器转发不是指刚开始建立握手连接,而是在通过服务器建立连接之后,就不再需要服务器【除非双方网络出现变化或者断开什么的异常】。这样不用消耗服务器的流量。 如果双方都在路由器后面条件下,必须通过服务器中转所有流量,那穿透打孔就没有意义了,就不是我所理解的打孔模式了。[/quote] 双方都隐藏在路由器/防火墙后面,不论使用TCP还是UDP都穿透不了,只能通过服务器转发(服务器一直要有效)。 [/quote]
lyhoo163 2017-07-26
  • 打赏
  • 举报
回复
你说的功能,可以实现,就是要在最底层的IP连接,难....
newpeng 2017-07-25
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
这个我知道,我想要问的是:这种情况下,是不是不能直接打孔,只能通过服务器转发?我说的服务器转发不是指刚开始建立握手连接,而是在通过服务器建立连接之后,就不再需要服务器【除非双方网络出现变化或者断开什么的异常】。这样不用消耗服务器的流量。 如果双方都在路由器后面条件下,必须通过服务器中转所有流量,那穿透打孔就没有意义了,就不是我所理解的打孔模式了。
  • 打赏
  • 举报
回复
不是有公网IP就可以,像广电、长城宽带,虽然分配的是公网IP,但是它这IP是隐藏在防火墙内部的,从外部主动连接内部IP会失败。
newpeng 2017-07-21
  • 打赏
  • 举报
回复
引用 4 楼 doloopcn 的回复:
操作系统有防火墙,很多路由器也是有防火墙
内网穿透已经考虑到要绕过防火墙的吧?不然还怎么穿透?从我在网上搜到的原理上讲,先连接对方的机器自然会被对方防火墙【路由?】给挡住,但对方再主动连接自己时,不是就应该建立起连接了么?我看网上的资料都这么说。 tcp穿透模式。
newpeng 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 lyhoo163 的回复:
建议使用蒲公英,构建穿网。
我想自己用代码实现。
doloopcn 2017-07-20
  • 打赏
  • 举报
回复
操作系统有防火墙,很多路由器也是有防火墙
doloopcn 2017-07-20
  • 打赏
  • 举报
回复
你应该还要把防火墙的因素考虑进去
lyhoo163 2017-07-19
  • 打赏
  • 举报
回复
建议使用蒲公英,构建穿网。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧