【问题标题】:C# Sockets - Banning IP AdressesC# 套接字 - 禁止 IP 地址
【发布时间】:2012-11-03 05:31:47
【问题描述】:

我有一个关于 C# 中的套接字的问题。我有一个服务器,我想阻止它连接到 IP 被禁止的客户端。两者都是用 .NET 4.0 制作的。

服务器通过 Internet(无 IP 主机名)运行,而不仅仅是在本地网络中。问题是客户端的IP每天都在变化,所以我不知道如何永久禁止这些客户端。我知道我可以通过简单地将客户端的 IP 与任何被禁止的地址进行比较来禁止它们。

if ( banned_ip == clients_ip )
{
     client.Disconnect();
}

但是如何获取我可以永久禁止的客户 IP?

如果您需要更多信息,我会发布它们。

【问题讨论】:

  • 不要在客户端级别禁止。在防火墙级别禁止,因此他们甚至无法到达您的客户。
  • 互联网上有许多网站试图通过 IP 地址的位置来限制访问,但这并不能阻止人们访问它们。

标签: c# sockets ip


【解决方案1】:

永久禁止 IP 地址是个坏主意,因为许多 ISP:s 使用 dynamic addressing。没有很多附带损害,没有简单的方法可以实现您的要求。

我认为唯一可行的方法是实现一个简单的身份验证机制。

【讨论】:

  • 问题是我打算把客户端翻译成java作为游戏的模组,所以绕过这个认证系统真的很容易。
【解决方案2】:

我同意 Marc 的观点,您应该在防火墙级别禁止。

如果您想获取客户端的 IP,请使用套接字的 RemoteEndPoint Property,然后您可以将 Endpoint (parent class) 转换为 IPEndPoint,然后使用 Address propertyToString 获取IPv4 或 IPv6 不错的格式。

【讨论】:

  • 他明确表示他知道如何禁止客户端,他的问题是客户端的IP地址每天都在变化。
  • @Sean Right 这就是为什么我在 Socket 类中包含了如何获取 IP 地址的原因。
  • 是的,但是如果你在周一获得了一个 IP,而被封禁方的 ISP 使用了动态寻址,并且在周一晚上发生了变化,那么他在周二不会被封禁,因为他的 IP 地址不同。
  • 是的,问题是如何禁止 IP 地址。这可能是 OP 正在使用的众多解决方案之一。
  • 但是即使我在防火墙级别禁止这个 IP,它仍然会改变。那不是也没有意义吗?
【解决方案3】:

很明显,在您获得客户的 MAC 地址之前是没有办法的(不过最好的方法是通过硬件防火墙来处理)。

如果您需要查找 MAC 地址,请查看此内容: Reliable method to get machine's MAC address in C#

【讨论】:

  • 他明确表示他知道如何禁止客户端,他的问题是客户端的IP地址每天都在变化。
  • 您不能使用客户端的 MAC 地址,除非客户端与服务器在同一个 LAN 上,他在问题中指出它在互联网上,因此您无法获取客户端 MAC。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多