目前有一个需求如下.
  客户有几台游戏服务器,游戏服务器上跑着CS之类的服务,有一个网站.他希望用户玩游戏之前先上他的网站登陆,不上网站就不能玩游戏。
   另外还希望能把那些有作弊软件的人也屏蔽掉。
  我现在的想法是在服务器上装一个防火墙,屏蔽所有IP,如果用户登陆了网站,就把用户的IP放到数据库里,然后每格一段时间就扫描数据库,发现哪个IP,就把那个IP开放。
  在用户的机器上安装一个软件,扫描内存,如果发现一些软件,就把这个信息发送到服务器的数据库中,并且把用户的IP屏蔽。
  但是这样有一个问题,如果用户是在同一个局域网内,那么他们的IP相同,那这样就都被屏蔽或者都被开放了。
  哪位高手有这方面的经验或者作过类似的项目,能不能指点一下方向,我这样做行不行?

解决方案 »

  1.   

    用户登录后,取得IP和MAC地址(可以做一个web插件取,也可以让用户通过客户端登录来获取),然后让防火墙开开放IP,但是如果一个局域网内好几个机器都玩的话,我不知道防火墙有没有区分同一IP但不是同一MAC的功能
      

  2.   

    很久没搞sceket开发了,今天试了一下,ip确是相同的,不好意思是我搞错了
      

  3.   

    这样是不行的,只要是通过三层设备,用户端发来的报文的MAC地址就已经变化了,从服务器端只能看到是用户侧的ip地址和端口号及与服务器最近的一台三层设备的MAC。如果用户侧使用了NAT或代理,那么他们的ip地址都是一样的,只有端口号不一样。但是,这个端口号的映射关系又是由NAT或代理服务器来维护的,用户侧的软件是无法查得所使用的公网ip的端口号的。因此,你没法在防火墙设置相应的规则来区分同一公网ip的2个用户。有可能的办法:在网站上做个类似代理服务器的东东,由它来转发游戏服务器与用户间的报文。通过控制那个类似代理的东东来控制用户是否能够连接和使用游戏服务器。
      

  4.   

    erhan我觉得你的方法是最可行的,现在客户说可以要求访问他的服务器的人都必须安装某个软件.你有什么经验? 我看过一下SPI还有API HOOK,发现他们都不能满足我的要求.如果我现在截获所有通过SOCKET 连接发送的包,然后在外面包上一些信息,里面包含客户端机器的硬件信息,你觉得这样可行吗?会不会有延迟,会不会有些类型的包能收发,有些类型的不能?
      

  5.   

    不是你说的这样,我的意思是,把游戏客户端->游戏服务器的这种结构打破,而是游戏客户端->你的服务器->游戏服务器,这样的好处是,用户无需加装软件。通常游戏客户端软件都有界面设置游戏服务器的ip地址的,你的服务器做好后,让那些客户端软件都指向你就行了。你的服务器软件,就象一个二倒贩子,左手接到游戏客户端的数据,右手就发到游戏服务器;右手接到游戏服务器的数据,左手就发到游戏客户端。对于游戏客户端来说,你就是服务器;对于游戏服务器来说,你就是客户端;它们都不知道你的存在。
    不知道我说明白了没有。
      

  6.   

    huhaojie(似水流年) 你好 
      要是一个局域网内的用户玩同一个游戏的话,他们的IP和PORT都是一样的.
      

  7.   

    不可能吧,源ip是相同的,源port应该是不一样的啊。
      

  8.   

    端口肯定不一样,都是NAT 影射的