请教:类似 OICQ 的应用程序是如何投递信息包的? (300分)

  • 主题发起人 主题发起人 BaKuBaKu
  • 开始时间 开始时间
B

BaKuBaKu

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在是在校园网中用 OICQ ,假如我和另外一个学校校园网中的网友通讯,我想知道
IP 包是怎样寻址的。
由于在校园网内部,所以外部肯定看不到我本机的 IP ,我也看不到对方机器的 IP ,
看到的只是校园网代理服务器的地址,这一点可以通过下面证明。
<Script src="http://www.ipsearch.com.cn/locate.ips"></Script>
我看到的是:您的IP是:202.114.67.3,您来自:武汉大学
当然,我在校园网内部并不是这个 IP。
假如对方向我发送一条消息,他肯定只能指定发送到校园网服务器,因为他并不知道我的
内部 IP ,那么信息包到了服务器后,又怎么能到我的电脑呢?
 
这个问题有很多人问,不过还是一直没有解决,有人回答的话我也给分吧。 :)
 
如果是这样:
你向代理发起一个请求:202.112.26.3:9999,代理记录这个请求,然后用代理服务器的
ip:临时分配给你的一个和别人不同的端口 重新发起一个请求到oicq的服务器,以后
你的好友就按照这个ip:端口来和你通信.另一个在校园网内的也一样.
大致就是这样的.
关键是提交到oicq服务器的是代理的ip+它分配给你的一个和别人不同的端口
因为代理对你的应用是透明的,所以应用可以继续
 
然则oicq的服务器必须响应任何(未知)的端口?
 
同意g622,代理服务器会映射一个其他的断口号給你的。你可以看到很多在网吧上网的人的
端口号不是4000。
TO 教父 上次你看我的port不是10XX吗?

OICQ服务器端会记录下你的这个代理的IP和新的port。
下面我想是:
你的代理服务器收到转发来的UDP信息后会自动根据port换成你的内部IP

我也有疑问:
这样所有的全部依靠代理服务器的程序来完成,代理程序是通过自动维护一个列表的
方式来完成的吗?哪里有自己写代理服务器的资料?

TO:左
OICQ服务器的端口应该是固定的吧





 
<script>
function modifyLetter(id)
{window.open("ModifyLetter.asp?lid="+id,"modifyletter","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=630,left=5,top=5");}
</script>
 
我们公司的OICQ给屏蔽了不知道有什么方法绕过它吗,多谢指教
 
OICQ服务的端口是固定的,前面说的IP+分配的端口是指代理的,然后代理记录这个和你的
连接,自己再发起一次连接到202.112.26.3:9999,以后把代理服务器到实际你请求服务的
目标之间的连接和你自己与代理服务器之间的连接关联在一起,并在两个连接之间完成转
发数据,同步连接等.前面有一个简单的代理服务器的例子,请查找一下.一般是要维护一个
表结构的.
 
欢迎继续讨论!
 
g622,你知不知道ms proxy和wingate在代理中处理方式有那些不同?
用ms proxy代理时用sniffer捕获到的包目标ip是代理服务器的,
用wingate时由是能得到真正的目标ip.
而且ms proxy代理时发送的数据包中包括请求应用程序的名字.
难道ms proxy是捕获socket消息处理?有这样的API?
 
应用级的代理有多种 如ftp的,http的,socks的,gopher的等,它们中间有的是需要客户端
和代理之间应答的,而我只是用上面的方法作过而已.ms proxy和wingate我都没有有过,所
以不清楚的说,希望各位有实际经验的说一说.
至于捕获socket消息处理?我倒是很有兴趣的,但proxy估计不是的,我觉得是要hook相关
的函数.网上见过有人作这个的,但他是替换了winsock.dll,这个是有原代码的.我觉得这
个方法有效但不理想.前面就有人提问过hook socket的方法.可惜没有答案.....
 
有这样一个现象,如果你开一个oicq,则端口号为4000,如果你开了两个,则为4001
如果你用了代理服务器,则从4000依次向后排,我见过我的oicq端口是20000以后的现象。
由此可以得出推论,代理服务器是通过代理服务器ip+端口==>连接者ip+端口
或许是这样的,也许路由寻址并不是oicq的功劳,其实不过是router的本职工作罢了

 
这些都是由代理服务器自动分配的
程序一般不用管
 
//路由寻址并不是oicq的功劳,其实不过是router的本职工作罢了
是这样的
写个socket程序跑到学校外面一试就知道了
 
>>有这样一个现象,如果你开一个oicq,则端口号为4000,如果你开了两个,则为4001
>>如果你用了代理服务器,则从4000依次向后排,我见过我的oicq端口是20000以后的现象。
>>由此可以得出推论,代理服务器是通过代理服务器ip+端口==>连接者ip+端口

我用程序监测过, 端口号是在循加一, 这点同意qiaohj, 但连接者ip+端口好像不是
 
yellowmoon:

xie ke说得对,应该是你公司把OICQ的端口锁定了,你首先启动一次OICQ,
然后接着又启动一个OICQ,假设你第一次的端口4000,那么第二次的端口是4001,
你第二次启动的OICQ就可上去,然后把第一次的OICQ关闭就行了.我公司也是一样
这种行得通试试看.
 
在下有个问题:如果我的计算机的 1000 2000 3000 4000 端口在局域网通过代理
同时向外发信息,那么,代理服务器给我开几个从外部网可见的端口?一个还是四个?
 
后退
顶部