代码之家  ›  专栏  ›  技术社区  ›  GibboK

以最佳方式存储数据库中的IP地址

  •  2
  • GibboK  · 技术社区  · 15 年前

    我需要创建一个表来存储黑名单的IP地址在我的博客垃圾邮件的情况下。 我想知道:

    • 存储IP地址的最佳数据类型是什么。
    • 我可以在此表中列出哪些您认为对垃圾邮件发送者有用的其他字段。

    谢谢你的时间

    6 回复  |  直到 15 年前
        2
  •  8
  •   Nathan Phillips    11 年前

    IPAddress.GetAddressBytes() . 如果您使用的是实体框架或类似的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(); }
        }
    
        3
  •  2
  •   Oded    15 年前

    最简单的事情就是储存 char(15) ,假定为IPV4。

    这是最简单的使用形式,不需要复杂的转换和计算,除非您存储大量的数据(数百万条记录),否则性能不应考虑在内。

        4
  •  1
  •   Lazarus    15 年前

    垃圾邮件发送者不太可能继续使用同一个IP地址,所以你将在这一个打败仗。最好实施 CAPTCHA

        5
  •  1
  •   doron    15 年前

    以最容易使用的形式储存。因此,如果你的博客软件给你的IP地址作为一个字符串,存储它作为一个字符串。如果软件将传入的IP地址作为无符号整数提供给您,请以这种方式存储它。这将使您不必为每个传入连接将IP转换为可用的形式。

        6
  •  0
  •   Gopi    15 年前

    总的来说,我认为这将取决于您要启动的查询类型。如果查询是基于ipaddress的完全比较的简单查询,或者ipaddress不是过滤器的一部分,我会说简单地将其维护为varchar将是一个很好的方法。如果您想使用复杂的查询进行搜索,例如属于一个子网中ip地址的行等,则可以将ip地址存储为四列中的四个int值。