gpt4 book ai didi

SQL 脚本 - 检查 IP 是否已列入黑名单

转载 作者:太空狗 更新时间:2023-10-30 01:49:30 25 4
gpt4 key购买 nike

我正在学习SQL,希望得到您的建议,看看这段代码是否写得正确,或者更好的方法。此脚本创建:

  • 用于存储列入黑名单的 IP 地址的表
  • 允许在 4 个八位字节中吐出 IP 地址的存储过程
  • 允许检查 IP 是否列入黑名单的 SPROC请告诉我!谢谢!

    -- Black Listed Table
    CREATE TABLE UtlBlacklistedIPs
    (
    octet1 TINYINT,
    octet2 TINYINT,
    octet3 TINYINT,
    octet4 TINYINT
    );

1 个存储过程

    -- Convert an IP address in 4 octet for db storing
CREATE PROCEDURE dbo.storeIPoctetsv1
@ip CHAR(15)
AS
BEGIN
SET NOCOUNT ON
INSERT UtlBlacklistedIPs(octet1, octet2, octet3, octet4)
SELECT
CONVERT(TINYINT, PARSENAME(@ip, 4)),
CONVERT(TINYINT, PARSENAME(@ip, 3)),
CONVERT(TINYINT, PARSENAME(@ip, 2)),
CONVERT(TINYINT, PARSENAME(@ip, 1))
END

2 个存储过程

-- SPROC check if an IP address has been black listed
CREATE PROCEDURE dbo.sprocCheckIp
@ip CHAR(15)
AS
BEGIN
SET NOCOUNT ON
DECLARE
@octet1 tinyint,
@octet2 tinyint,
@octet3 tinyint,
@octet4 tinyint;

SET @octet1 = CONVERT(tinyint, PARSENAME(@ip, 4));
SET @octet2 = CONVERT(tinyint, PARSENAME(@ip, 3));
SET @octet3 = CONVERT(tinyint, PARSENAME(@ip, 2));
SET @octet4 = CONVERT(tinyint, PARSENAME(@ip, 1));

IF EXISTS (
SELECT octet1, octet2, octet3, octet4
FROM UtlBlacklistedIPs
WHERE
octet1 =@octet1
AND octet2 =@octet2
AND octet3 =@octet3
AND octet4 =@octet4
)
BEGIN
PRINT 'Ip: '+@ip+' is black listed'
END

ELSE
BEGIN
PRINT 'Ip: '+@ip+' is NOT black listed'
END
END

一些值(value)观

    -- Insert dummy values
DECLARE @i INT
SET @i = 0
WHILE @i < 2000
BEGIN

EXEC dbo.storeIPoctetsv1 @ip = '204.71.34.21'
EXEC dbo.storeIPoctetsv1 @ip = '12.38.145.32'
EXEC dbo.storeIPoctetsv1 @ip = '127.0.0.1'

SET @i = @i + 1
END

使用存储过程

    -- Use SPROc
EXEC dbo.sprocCheckIp '125.254.125.111' -- NOT black listed Ip
EXEC dbo.sprocCheckIp '204.71.34.21' -- black listed Ip

最佳答案

我假设您要在数据库之外使用它,大概是在 .NET 中?在那种情况下,我会像这样重组:

  • 用于存储黑名单 IP 的 SProc,以四个八位字节作为输入
  • 用于检查任何 IP 的 SProc,输入为四个八位字节,输出为 0 或 1(使用 RETURN,而不是 PRINT)
  • 改为在 .NET 中拆分 IP 地址。 SQL Server 的字符串处理很差,所以你最好编写一个 Ip 类,使用静态方法 int[] ToOctets(string ip) 来为你处理这个问题.您将这样使用它:var octs = Ip.ToOctets("213.82.158.93")
  • 当您检查 IP 是否被列入黑名单时,您可以调用 ExecuteScalar(或者任何可以使用您喜欢的连接器调用的从存储过程中获取标量值的方法)来获取结果。

关于SQL 脚本 - 检查 IP 是否已列入黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com