如何确定代理上网的主机真实地址?(30分)

  • 主题发起人 主题发起人 chensh
  • 开始时间 开始时间
C

chensh

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用UDP在两台计算机之间通过互联网通信,客户端是通过代理服务器上网的, 地址是
动态生成的内网网址,如:192.168.0.3 ,我的服务器端怎样与这样的内网地址通信呢?
(我的服务器端是有固定IP的)
客户端可以发消息向服务器, 可服务没法向客户发消息呀, 我急的很。
 
登陆一些网站就可以看到服务器的IP,比如天网的站点
 
我是想通过代码,在程序之间动态地确定。
就算知道代理服务器的IP, 也不知道被代理客户机的IP呀?
 
必须客户端主动连接到服务器端后才行
像qq

-----
http://www.8421.org
 
用UDP控件收到消息事件中所带的 fromip参数作为客户真实IP可以吗?
 
如果网络不是很大的话,请使用固定ip
 
可客户使用的是动态的内部网的IP呀。
 
好办, 做坐定时器程序, 客户端定时用SOCKET 通讯向服务器发送自己的IP地址信息
服务器端用数据库或一个文件动态存储个客户机的IP地址表
可以将程序做成Service,很方便

不过,朋友, 这可绕了, 既然通过代理服务器上网, 哪局域网IP 随便都静态不就得了
干吗吝啬啊? 有难言之隐? ??
 
老兄,是这样的,我写了一个免费程序面向网吧。同时也写了一个监控程序运行在我的宽
带上网家中的计算机上,我想通过监控程序来了解我的程序在网吧运行的情况(当然不会
涉及到客户的私有信息),现在网吧宽带居多又是代理上网,客户端一般是192.168.1.45
之类的网部网IP通过代理服务器(Internet连接共享、WinGet等)上网,那么我的监控
程序怎样才能知道客户的真实IP地址呢?
 
我也有同样的困惑,qq是怎么实现的呢 ?
 
如果是通过squid代理服务器(linux下的,大都是用这个)上网,那么可以在请求头
中得到这些变量的值(用有php的服务器试试访问这个内容的页面:<? phpinfo(); ?>,
如:
HTTP_VIA = "1.1 count:3128 (Squid/2.3.STABLE1)" (代理服务器名称)
HTTP_X_FORWARDED_FOR = "10.0.1.111" (局域网真实IP)
用php的话访问 $HTTP_VIA 和 $HTTP_X_FORWARDED_FOR 全局变量就可以得到

实际上对qq之类的软件,是不需要知道这个的,只需要往对方的internet(即网关)
ip地址和端口发送即可,这两个东西在与服务器建立连接后服务器都可以获取,最后
会由网关转发到局域网内的,你不需要考虑这个,想知道怎么回事可以看看NAT原理
 
qdyoung,有这样一个问题,一个局域网,ip为 192.0.0.x,另一个为互联网上ip:202.166.2.3
通过网关连接,我做了一个简单的通讯程序,可以从192.0.0.1上发信息到202.166.2.3
上,但怎么才能从202.166.2.3上发信息到192.0.0.1的局域网机器上呢?

我想搂主遇到的可能也是类似的困惑。
拜托讲解一下。
 
那不是把信息发到了网关吗,而不是发到局域里的电脑上。
就算网关给转发了,那同样的IP和端口,网关如何区分是哪一台电脑呀?
 

是这样的, 程序不肯能知道通过代理服务器上网的客户的真实IP地址, 在外部看来
这个局域网进出的数据都将反映为代理服务器的, IP和MAC地址, 我是做三层交换机
开发的, 我们研究过类似问题。
至于局域网内转发自然是由网关来翻译转发的, 代理服务器就是做这一件事情, 至于
怎么做的么, 哪只有问tcp/ip协议了。 同时qq能看到的ip地址也一定是proxy的, 而不是
客户的, 不信可以试试。


 
同意大家说的,服务器其实根本没有必要知道客户的真正的网内IP,即使你知道了也没有太大
的用途
 
to扳手
本来写了很多,结果不知道按了什么键,一下子都没了,气愤,不写了
自己找找NAT的资料吧,是通过端口映射的
 
to:qdyoung

晕!!~~~ 不过先谢了。
 
to张:最近比较忙,很少上来
接着重写。我是从研究ms win2k server的路由服务的nat信息知道的。
如局域网192.168.1.1通过网关202.98.1.1链接到internet机器61.168.1.1:8000端口
连接后192.168.1.1是用的3987端口,这个192.168.1.1:3987就被映射到网关的
202.98.1.1:5678端口,61.168.1.1发送信息到192.168.1.1就只需要发送到
202.98.1.1:5678,网关会自动把它转发给192.168.1.1,当然它首先要记录本机的
端口与那台机器哪个端口对应。就是说这种ip共享的原理是用一个ip的多个端口来
映射很多ip(局域网)的端口,如192.168.1.1:4000被映射到202.98.1.1:8765,
192.168.1.2:4000被映射到202.98.1.1:8764。

所以服务器不需要知道局域网内的ip,也无法知道,除非网关或局域网微机主动
把这个信息发送给服务器,上面我说的squid代理服务器就会这么做。

如果两个局域网内的机器要通信,那就无法直接通信了,因为不能先知道对方的
internet ip(网关)和端口,只有先都链接到服务器,服务器保存这个信息并把
它发给双方,即需要通过中间牵线。
 
NAT有静态绑定和动态分配两种,前一种是可以使得两台处在不同内网的机器互相识别。
问题中的UDP发信,只要监控端或者代理端一端有有固定IP就可以
 
后退
顶部