一个修改数据库的程序,用到了scktsrvr.exe,scktsrvr.exe开放了端口210,但这台机器在局域网中,也不允许在路由器上映射端口,如何远程连接到此端口?用过lcx的朋友应该觉得这个问题很好解决,但那个东西会被查杀的,再说我还想把这个功能编进程序,没源码不行懂反向连接的朋友帮帮忙,一般的反向连接是clientsocket用随机端口连接serversocket指定的开放的端口, 但这次没那么容易了

解决方案 »

  1.   

    不可能实现的。原来的应用程序客户端是以TCP Client的身份去连接这个scktsrvr的,应用程序客户端不提供可连接的服务端口,所以是不可能实现"反向连接"的。除非你有公网上建立一台服务器,完成数据转发服务。原来的应用程序客户端去连接这台公网服务器,内网内编写一个程序,一头连着scktsrvr,一头连着公网服务器。"不允许在路由器上映射端口",这在应用布署来说,简直是句笑话。
      

  2.   

    肯定能现实,而且不用中转服务器,只要应用程序客户端所在的机器有公网IP就可以,lcx就能完成 举个例子,内网中有一台机器开了3389,路由器上没开任何端口,按你说的肯定连不上它了吧  下面是lcx的使用说明:如在本机上监听 -listen 51 3389,在肉鸡上运行-slave 本机ip 51 肉鸡ip 3389,现在在本机用mstsc连接127.0.0.1的3389 就可以连接到那台内网机器的3389 ..上面这些我亲身用过如果上面我说的这些你不懂 说明你根本没黑过网站,更没拿下过内网服务器(人家WEB服务器在内网,只在路由上开了80,按你说的肯定是没法连它的3389了?)"不允许在路由器上映射端口",这在应用布署来说,简直是句笑话。  我不能保证我所黑的每一个内网机器的路由都能拿下密码,没办法的事其实把LCX做免杀可以完全满足需要,但我想把这个功能做到程序里       还有那个该死的scktsrvr在托盘还有图标,也是麻烦事
      

  3.   

    口气不要这么大。不要拿"黑"当炫耀资本。你所说的其实就是在公网上建立了一台服务器,只不过这个服务程序是运行在了有公网IP的应用程序客户端上而已。你所说的LCX完成连接的过程是这样的: 内网主机上的LCX程序 -> 网关 -> 公网上应用程序客户端所在主机的LCX程序。希望你是知道这个过程的,可千万不要以为LCX是从外网发起TCP连接的。如果应用程序客户端的公网IP是动态分配的话,这种方案还需要解决动态IP定向的问题,这还得借助一个有固定公网IP的服务器。
    TCP连接的特性摆在这了,这个原理是已经规定死了的,不可能实现的东西就是不可能实现的。
      

  4.   

    我并没在公网建立服务器,因为本机上网是ADSL,有公网IP(比如说210.1.1.1) 客户端连接时用的是动态DNS,解悉成IP就可以反向连接了,当然也可以通过FTP或者HTTP去获取,这不是主要的LCX确实是反向连接的 但它并非常见的PORTMAP的端口映射 两边均要运行LCX才可以的,但它在两边的功能是不同的举个例子吧:LCX在本机运行后监听两个端口888和210  远程内网机运行LCX后用随机端口如65432连接本机的888 这样建立了一条公网通道。本机的客户端软件连接127.0.0.1的210,210再把数据传送到127.0.0.1的另一随机端口如999,999端口会把数据通过888传到远程内网机的65432, 65432把接收的数据通过127.0.0.1随机端口666发送到127.0.0.1的210,这样scktsrvr.exe就能收到数据了其实总共建立了三个连接  一.本机的127.0.0.1:210 --127.0.0.1:999  二 210.1.1.1:888--内网机器的公网IP:65432(反向建立的) 三内网机器的127.0.0.1:666--127.0.0.1:210问题就是怎么把连接一的数据传给连接二,连接二的数据传给连接三,连接三的数据传给连接二,连接二的数据传给连接一,LCX现实的就是这些
    我不明白的就是怎么把它们之间的数据传递 怎么用SOCKETCLIENT SOCKETSERVER来实现  我也不打算学习这些基础知识  对于你们这些网络编程的高手应该不难吧我向天发誓,这个真的可以实现的 俺才学了几天的DELPHI了 网络编程根本不懂  你们就发发慈悲吧 别让我去从头学啊
      

  5.   

    帮你整理一下:一、应用程序客户端:某端口 --> LCX(应用程序客户端):210   (应用程序客户端所在主机)
    二、LCX(应用程序服务器端):某端口1 --> 内网的网关 -->  LCX(应用程序客户端):888
    三、LCX(应用程序服务器端):某端口2 --> 应用程序服务器:服务端口  (应用程序服务器所在主机)无论是应用程序客户端还是应用程序服务器端的LCX,都完成数据的透明双向转发,即:
    LCX(应用程序客户端):210 <==> LCX(应用程序客户端):888
    LCX(应用程序服务器端):某端口1 <==> LCX(应用程序服务器端):某端口2最终实现的连接方向是:应用程序客户端 -> LCX(应用程序客户端) <- 公网 <- LCX(应用程序服务器端) -> 应用程序服务器你所谓的"反向连接"就是借助运行在应用程序客户端和应用程序服务器端的两个LCX来实现的。
      

  6.   

    你也不能说不是反向连接吧 数据就是通过首先建立的那个反向连接通信的现在你也明白我说的了 怎么用socketserver 和socketclient来实现啊在应用程序中有两个socketclient,其中一个socketclient与远程socketserver建立连接后,从远程socketserver接收的数据怎么让另一个socketclient去建立另一个新的连接然后发出去?
      

  7.   

    没有公网ip,不能测试.
    有固定公网ip,太容易暴露自己,人家随便都能找到你.
    固定公网ip,毫无价值,那是活靶子.
    支持2楼说法,去找个可用公网服务器,才能保护自己.
      

  8.   

    我用的是动态DNS 只在连接的时候更新成自己的IP  别的时候随便改一个 今天发现了个程序  能实现上面我说的功能  但没有源码 没用 想把它修改也很难,只是告诉大家  能实现