从局域网内部同外部连接的问题!200分!!! (200分)

  • 主题发起人 主题发起人 mogao
  • 开始时间 开始时间
M

mogao

Unregistered / Unconfirmed
GUEST, unregistred user!
我准备在我写的一个程序里面实现tcp和udp两种连接方式
但是在局域网里面不行!
oicq的设置中有:1、通过局域网连接和直接连接internet
2、通过socks5连接(支持验证)
谁能告诉我怎么实现!
非常急!有资料或源代码都可以!
谢谢
 
局域网连接外部需要通过网关实现,问题是你现在能否ping通。
问题不是很明确,无法详解。
 
当然ping的通
大家快点来讨论,我有急用!!!
 
不太明白你的意思。随便讨论一下。
TCP和UDP通讯本身并不区分是局域网还是广域网,只要
网络协议是IP就可以。
在VB的BOOK ONLINE中应当可以查找到TCP/UDP的例子,
文档写的很清楚,因为是OCX控件,所以在DELPHI下一
样适合。
唯一的差别是DELPHI是一种强格式语言,所以在使用时
要用OLEVarent类型的变量。
 
只要能ping通,内外是一样的。
 
我知道他们用的都是ip协议
在局域网里面。ip地址都是假的,他怎么和internet上的server联系呢?
必须通过网关或防火墙,我想知道实现得细节。
例子:
oicq在局域网里面使用,如果用的是wingate作代理,必须设socks5
如果用sygate作代理,必须设置“通过局域网连接internet”
 
呵呵,这里面有很多技巧的.
要考虑WINGATE,SYGATE,169用户,
最麻烦的事是A,B两用户各自在不同的代理后面.

这里可以给你提供一些方向性的建议:
WINGATE并不需要设置SOCK4/5,
SYGATE更不需要.
为了支持两个代理后面的用户(A和B)之间的直接通讯,
需要借助服务器端或者另外一个不在代理后的用户C.
你需要做大量实验,逐步摸索其中的奥妙.
因为有关资料总是写得不全,甚至不一定可靠.

你在开发即时系统吗? 呵呵.
 
上面你不是说能ping通吗?这样的话你的网关设置就是没问题的。
现在你说‘他们’,也就是说你没有办法掌握对方的情况?
现在的问题来了,对方如果没有提供对某个端口的服务,那你是毫无办法的。
 
你所说的lan的ip是这样的,你们的lan用的可能是ip地址是公用的ip地址,在内部只要你
分配好ip就可以了。但是要跟internet 相连,必须要申请一个公用的ip 地址池,这个地址
池跟 你的lan中的电脑的ip可能是一一对应的关系,也可能是一对多的关系的。这就需要在
router里配置一个叫网络地址转换的协议的。你说的我还不明白我只能说这么多了。
 
to everybody:
我现在用的电脑是在局域网中的(地址:192.168.0.200),服务器安装的是sygate4.0(3.0也用过)。
可以使用oicq、foxmail等应用程序,我利用ics的控件写了一个udp客户端和一个udp服务器端程序,可以
进行简单的通讯。我在局域网内部调试非常正常,就是不能通过网关(sygate4.0、3.0),情况如下:
把server端(接收数据端)放到外面的服务器上(另外一台单独的服务器,直接接入internet),我在局域
网内和他通讯,server可以收到消息,但这个消息的发送地址和端口是我的局域网接入internet所用的那台
服务器的ip地址和一个随机的端口!所以,由server端发回来的反馈信息用客户端是收不到的。
请问各位:我该怎么解决!!!各位大哥,一定要帮这个忙!!!
 
天啊!怎么在大富翁上稍微有点难度的问题就没有人回答呢?
 
听课的
(我的收藏夹中有一大堆“稍微有点难度的问题”
都很关心 全都不会)
 
我明白你的问题。你现在面临的是怎么透过Sygate代理进行通讯,这涉及Sygate的工作
原理。Sygate是使用NAT技术的伪网关,它的工作原理是这样的:
当局域网里的客户发起连接时,Sygate截获这个ip包,然后分配一个本地端口,把待发
送的ip包的Source ip改为网关上的正常ip,把端口改为刚刚分配的端口,修改其他的必
须修改得域(如check sum),最后从连上internet的网卡上发出去。同时,Sygate纪录
这次邦定并启动一个时钟用于检测超时。从internet上来的ip包则要经过检查,看是
不是已经有一个邦定,有的话则把进来的ip包经过相反的修改后,由连接局域网的网卡上
发出去。当Sygate检测到连接终止或超时时,Sygate就释放该纪录和本地端口。
 
由Sygate的工作原理可以知道,使用Sygate将会给程序带来很多限制,因为:

1。局域网里的客户不能监听端口,因为这种动作不会引起网关上的Sygate的注意,
Sygate自然无法登记路由。其实,处在局域网之外的客户是完全无法标示局域
网中的机器的。在局域网中标示机器的ip,在超出局域网范围后就变得没意义了。
2。虽然Sygate工作在无连接的ip,但实际上这种技术倾向于给tcp等有连接的协议
提供服务。
 
解决办法:
我想可以这样。
1。尽量只在有正常ip的机子上监听端口。
2。尽量使用tcp。
3。如果真的要在局域网中监听的话,可以建立一个map,把局域网中的ip:port map到
网关上的ip:port。WinGate可以建立这种map。自己写一个也很方便。唯一缺点就是
要动网关在的机器。

另外,好像有方法透过Sygate接受进来的UDP包(出去的没问题),不过我还不是很清
楚,可能得手工配置Sygate的规则(Rules)。Sygate自带的就有让OICQ接受UDP包的
规则。不过这方面没有文档,不敢胡说八道。可以在Sygate装的目录下找到一个叫
Apprule.cfg的文件,里面就是规则了。
 
看看这:
#====================================================================
# Net2Phone
:INIT "Net2Phone"
OUT UDP 6801 6801 0.0.0.0 0 -
:SUB
IN UDP 1 30000 0.0.0.0 0 0 AD
IN TCP 1 30000 0.0.0.0 0 0 AD
:END
#===================================================================
从Apprule.cfg中copy出来的,我的理解是一个
“OUT UDP 6801 6801 0.0.0.0 0 -”
的transaction将启动下面的maps。
IN UDP 1 30000 0.0.0.0 0 0 AD
IN TCP 1 30000 0.0.0.0 0 0 AD

不知道对不对
 
to SNKoala:
谢谢你给我的帮助!
但是他的规则中没有包括所有的软件规则,但是其他的软件基本上都可以使用,这是为什么?
我想知道一点:透过sygate网关,需要软件怎样进行判断,怎样写代码?
你说的:
自己写一个也很方便。唯一缺点就是要动网关在的机器。
这显然是不现实的,oicq等icq是怎么实现的?利用icq的规则吗?
 
其实软件功能是需要在一定的环境下定义的。以前我装Wingate,可以用这样的代理
看看网页。后来为了用ICQ,就找了Sygate,当时他就声明支持ICQ了。然后就是OICQ,
NetPhone,Net2Phone,DirectPlay....当一个软件被大多数人接受了,自然就会有人支
持。
有一个办法你可以试一下,就在Sygate对现在一些软件的支持上做文章。例如,
#====================================================================
# Net2Phone
:INIT "Net2Phone"
OUT UDP 6801 6801 0.0.0.0 0 -
:SUB
IN UDP 1 30000 0.0.0.0 0 0 AD
IN TCP 1 30000 0.0.0.0 0 0 AD
:END
#===================================================================
从这条规则上看,我的理解是,只要给6801端口发一个UDP包,就可以接受1到30000端口
的UDP包。不知道我的理解对不对,也没有试过,你可以试一试。(有什么结果也麻烦告
诉我一声)
 
to SNKolal:
你的意思是不是利用其他的以有的规则?oicq是不是就是这样作的?我在sygate的规则
说明里面只找到了icq的规则,没有oicq的。
 
我也正在看。本来想装个NetXRay看一看oicp到底怎么个工作法,可是我装的NetXRay在
我的英文2000下总是不能用。我查看过Sygate的纪录,oicq发的UDP只有一个纪录,数据
量很大,是发往服务器的。我正在纳闷是其他的没有记录呢,还是就根本没有。(不会根
本没有的,我想!)等我找个别的工具跟以下吧。

顺便问问,NetXRay 在英文版Windows 2000 build 2195中不能用??
还有什么好的工具可以取代NetXRay??(以前都用的NetXRay)
还有谁愿意帮忙的可以帮我看一看oicq发送数据包的过程。
 

Similar threads

后退
顶部