找回密码
 加入
搜索
查看: 7601|回复: 23

能从对方的发过来的UDP信息中得知对方的ip和端口吗?

[复制链接]
发表于 2009-2-27 12:30:57 | 显示全部楼层 |阅读模式
RT,这个问题捆饶我好久了....
 楼主| 发表于 2009-2-27 13:52:55 | 显示全部楼层
在内网中所有的机器都享有主机同样的IP,如果访问INTERNET的时候主机会为每个不同的机器分配相同的IP和不同的端口,我的机器是外网单独享有一个固定IP的机器,内网通过我的IP和我预设的端口可以向我发送UDP包,而且我也可以接收到,但是我像内网的某台机器发送UDP数据包的时候他就不一定能收到(收到的几率是1/65535),因为我只知道它的IP不知道他们主机给它新分配的端口,因此数据丢失,如果可以获得主机给内网那台机器分配的端口就可以实现正常的数据传输...
发表于 2009-2-27 14:43:22 | 显示全部楼层
相同的IP不同的端口?
 楼主| 发表于 2009-2-27 14:47:31 | 显示全部楼层
是啊,内网中相同的IP,端口必然是不同的
发表于 2009-2-27 14:50:22 | 显示全部楼层
一个内网中允许相同的IP通讯的吗?
 楼主| 发表于 2009-2-27 15:06:11 | 显示全部楼层
我说的是内网中每台机器访问外网的时候都是相同的IP,比如说112.138.147.256,这个是外网IP,当然,内网IP肯定是不同的,比如192.168.1.0
 楼主| 发表于 2009-2-27 15:14:38 | 显示全部楼层
我先说下原理吧,内网假设有50台机器,每台机器的内网IP都是不一样的,比如从192.168.0.1-192.168.0.50,这50台机器处于一个局域网中,他们访问INTERNET的时候会共用一个外网IP假设为61.180.212.124(不是内网),比如说都要向外网的某台机器发送信息如87.62.120.210,在内网中50台机器都向那台机器发送信息,那么他们都是公用的一个IP怎么区分那台是哪台呢?就是用端口来区分的,192.168.0.1这太机器发送的信息用61.180.212.124的1号端口,192.168.0.2,这个机器发送的信息就用61.180.212.124的2号端口,当然其实并不是1.和2,只是举个例子罢了,当外网的那台机器反馈信息的时候,向61.180.212.124的不同端口发送信息,信息就会被端口相应的电脑接收。
QUESTION,我想要知道的就是如何获得从这个内网传来的信息的端口,否则无法确认到底是哪台机器给我传递的信息
发表于 2009-2-27 15:21:36 | 显示全部楼层
明白你的意思了.
你该去研究一下什么叫端口映射,什么叫反向链接.
 楼主| 发表于 2009-2-27 15:24:22 | 显示全部楼层
谢谢楼上的哥们指点
发表于 2009-2-27 16:32:39 | 显示全部楼层
原帖由 ceoguang 于 2009-2-27 15:21 发表
明白你的意思了.
你该去研究一下什么叫端口映射,什么叫反向链接.


精辟
 楼主| 发表于 2009-2-27 18:28:41 | 显示全部楼层
原帖由 ceoguang 于 2009-2-27 15:21 发表
明白你的意思了.
你该去研究一下什么叫端口映射,什么叫反向链接.

哥们,这种方法好象不行,需要设置路游器的虚拟服务器,我想要的是直接通过IP和端口连接,不过还是非常感谢你的帮助
 楼主| 发表于 2009-2-27 18:33:04 | 显示全部楼层
另外补充一下,我先发一段资料
  Server S (219.237.60.1)
            |
            |
            +----------------------+----------------------+
            | |
            NAT A (外网IP:202.187.45.3) NAT B (外网IP:187.34.1.56)
            | (内网IP:192.168.0.1) | (内网IP:192.168.0.1)
            | |
            Client A (192.168.0.20:4000) Client B (192.168.0.10:40000)

            首先,Client A登录服务器,NAT A为这次的Session分配了一个端口60000,那么Server S收到的Client
            A的地址是202.187.45.3:60000,这就是Client A的外网地址了。同样,Client B登录Server S,NAT
            B给此次Session分配的端口是40000,那么Server S收到的B的地址是187.34.1.56:40000。
            此时,Client A与Client B都可以与Server S通信了。如果Client A此时想直接发送信息给Client
            B,那么他可以从Server S那儿获得B的公网地址187.34.1.56:40000,是不是Client
            A向这个地址发送信息Client B就能收到了呢?答案是不行,因为如果这样发送信息,NAT
            B会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。现在我们需要的是在NAT
            B上打一个方向为202.187.45.3(即Client A的外网地址)的洞,那么Client
            A发送到187.34.1.56:40000的信息,Client B就能收到了。这个打洞命令由谁来发呢,呵呵,当然是Server S。
            总结一下这个过程:如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求Server
            S命令Client B向Client
            A方向打洞。呵呵,是不是很绕口,不过没关系,想一想就很清楚了,何况还有源代码呢(侯老师说过:在源代码面前没有秘密
            8)),然后Client A就可以通过Client B的外网地址与Client B通信了。

Server S如何获得两者的端口,谢谢
发表于 2009-2-27 20:19:41 | 显示全部楼层
既然不想用端口映射,那就用反向链接吧,前面不是已经提过了吗?
发表于 2009-4-6 18:25:52 | 显示全部楼层
这个怎么解决啊 有没有高手用AU3解决下啊
发表于 2009-4-6 18:30:05 | 显示全部楼层
12楼的也是解决方法啊.
P2P
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 01:52 , Processed in 0.090420 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表