我需要创建一张表来存储黑名单IP地址,以防止博客中的垃圾邮件发送者。
我想知道:
- 存储IP地址的最佳数据类型是什么。
- 您认为在此表中可以列出哪些其他字段对抗垃圾邮件发送者可能有用。
我使用MS SQL 2008作为我的数据库。
IP v4地址由4个字节组成,IP v6地址由16个字节组成,因此将它们存储为varbinary(16)字段。从您的问题标签中可以看出,您正在使用.Net,因此您可以使用 IPAddress.GetAddressBytes()
轻松获取这些字节。如果您正在使用Entity Framework或类似的ORM,则以下代码将对您有用。
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Net;
[Required, MinLength(4), MaxLength(16)]
public byte[] IPAddressBytes { get; set; }
[NotMapped]
public IPAddress IPAddress
{
get { return new IPAddress(IPAddressBytes); }
set { IPAddressBytes = value.GetAddressBytes(); }
}
最简单的方法是存储char(15)
,假设是IPV4。
这是使用的最简单形式,不需要复杂的转换和计算,除非您存储大量数据(数百万条记录),否则性能不应成为问题。
垃圾邮件发送者不太可能继续使用相同的IP地址,因此在这方面与其进行徒劳的斗争,还不如实现CAPTCHA。尝试消除IP地址或使用连接中的其他数据来“过滤”垃圾邮件发送者是得不偿失的。大多数情况下都是由自动化工具完成的,因此CAPTCHA是最佳选择。
以最易于使用的形式存储它。因此,如果您的博客软件将IP地址作为字符串提供,请将其存储为字符串。如果该软件将传入IP地址作为无符号整数提供,请以该方式存储它。这将使您免于为每个传入连接转换IP以便使用。