惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cybersecurity and Infrastructure Security Agency CISA
月光博客
月光博客
Apple Machine Learning Research
Apple Machine Learning Research
量子位
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
小众软件
小众软件
T
Tailwind CSS Blog
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
The Exploit Database - CXSecurity.com
T
Tenable Blog
博客园 - 叶小钗
宝玉的分享
宝玉的分享
P
Privacy International News Feed
T
Tor Project blog
博客园_首页
AWS News Blog
AWS News Blog
雷峰网
雷峰网
C
Cisco Blogs
Help Net Security
Help Net Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
Last Week in AI
Last Week in AI
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
Schneier on Security
博客园 - Franky
W
WeLiveSecurity
L
LINUX DO - 热门话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
大猫的无限游戏
大猫的无限游戏
腾讯CDC
L
Lohrmann on Cybersecurity
J
Java Code Geeks
美团技术团队
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX

博客园 - 龍峸.大卫

C#格式化字符串,日期,时间,货币 行动吧站长们,为地震遇难同志哀悼! 穷与富 ASP.NET备忘 - 龍峸.大卫 - 博客园 一个非常实用的javascript读写Cookie函数 - 龍峸.大卫 - 博客园 JavaScript操作Cookie详解 采用密码加密的javascript字符串加密、解密程序 - 龍峸.大卫 - 博客园 Microsoft Web Application Stress Tool - 龍峸.大卫 网站压力测试工具集 网站维护必知:网站压力测试 Jquery的N个插件 CSS的解决IE5/IE5.5/IE6/FF/IE7的兼容性问题(css hack) 鼠标悬停显示图片 客齐集图片鼠标悬停效果 始终固定在左上角的图片 - 龍峸.大卫 下拉选单图片选择器 - 龍峸.大卫 带链接的日历 - 龍峸.大卫 一个简洁的网页日历 - 龍峸.大卫 经典列表效果 - 龍峸.大卫
珊瑚虫IP数据库转 SQL 2005 纯真IP转sql
龍峸.大卫 · 2008-04-05 · via 博客园 - 龍峸.大卫

在幻想曲BLOG上看到不少朋友说,最近服务器上的IP数据好像不是很准确,于是重新做了一个新的,不少朋友可能需要这个数据库,因为文件太大的缘故,所以直接提供快速转换方法。

首先需要准备:

1.然后打开珊瑚虫IP数据库自带的 ShowIP.exe,选择解压,另存一个TXT文件:

2.用EiditPlus打开这个文本拖动到最后几行,删除多余的东西(千万别试图用默认的文本编辑器打开,内存小的话你会死的很惨):

3.打开Access(为什么不直接到SQL里面导入数据呢?因为会出现文本格式错误,所以先曲线救国吧):

4.选择刚才解压出来的文本文件:

5.按下面操作,不做提示的直接下一步:

7.打开MS SQL2005,新建一个数据库,名字自己定,以下代码都使用[BasName]代替你新建数据库名称。

8.继续如下操作:

完成执行下面的存储过程:

-- 建立IP转换到十进制方法
USE [BasName]
GO
/****** 对象:  UserDefinedFunction [dbo].[X16ToDe]    脚本日期: 09/19/2007 13:56:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO-- =============================================
--
 Author:        <Author,,Name>
--
 Create date: <Create Date, ,>
--
 Description:    转换IP为十进制
--
 =============================================
Create FUNCTION [dbo].[X16ToDe]
(
    
@Old_IP nvarchar(15)
)
RETURNS numeric
AS
BEGIN
    
DECLARE
        
@CharIndex INT,
        
@CurrPoint INT,
        
@SingleValue NVARCHAR(5),
        
@Cache numericSET @CharIndex = 1
    
SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    
SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    
SET @Cache = cast(@SingleValue as numeric)*16777216SET @CharIndex = @CurrPoint + 1
    
SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    
SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    
SET @Cache = @Cache + cast(@SingleValue as numeric)*65536SET @CharIndex = @CurrPoint + 1
    
SET @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    
SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    
SET @Cache = @Cache + cast(@SingleValue as numeric)*256SET @CharIndex = @CurrPoint + 1
    
SET @SingleValue = SUBSTRING(@Old_IP,@CharIndex,len(@Old_IP)- @CharIndex + 1)
    
SET @Cache = @Cache + cast(@SingleValue as numeric)
    
    
RETURN @Cache;
END

这一步你可以自己按照你的情况来做,我是为了加快数据库索引的速度,所以将IP全部转换为十进制,存到一个新表里面。

-- 建立十进制新表
USE [BasName]
GO
/****** 对象:  Table [dbo].[IP_Real]    脚本日期: 09/19/2007 14:01:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create TABLE [dbo].[IP_Real](
    
[startip] [numeric](180NULL,
    
[endip] [numeric](180NULL,
    
[country] [nvarchar](50NULL,
    
[local] [nvarchar](200NULL
ON [PRIMARY]

-- 格式化省份
Update [BasName].[dbo].[IP]
   
SET [country] = replace([country],N'',N'省 ')-- 删除CZ88.NET
Update [BasName].[dbo].[IP]
   
SET [country] = replace([country],N'CZ88.NET',N'')-- 将地区提出
Update [BasName].[dbo].[IP]
   
SET [local] = SUBSTRING([country],CHARINDEX(' ',[country],1)+1,len([country]))-- 存为国家或省份
Update [BasName].[dbo].[IP]
   
SET [country] = SUBSTRING([country],0,CHARINDEX(' ',[country],1))-- 去处前后导空格
Update [BasName].[dbo].[IP]
   
SET [country] = Rtrim(Ltrim([country]))
      ,
[local] = Rtrim(Ltrim([local]))-- 转换IP为十进制,并写入新表
Insert INTO [BasName].[dbo].[IP_Real]
           (
[startip]
           ,
[endip]
           ,
[country]
           ,
[local])
Select dbo.X16ToDe([startip])
      ,dbo.X16ToDe(
[endip])
      ,
[country]
      ,
[local]
  
FROM [BasName].[dbo].[IP]
order by [startip] ASC

最后测试一下看看:

-- 测试
DECLARE @IPNumber numeric
set @IPNumber = dbo.X16ToDe('219.140.31.91')Select [startip]
      ,
[endip]
      ,
[country]
      ,
[local]
  
FROM [BasName].[dbo].[IP_Real]
Where [startip] <= @IPNumber and [endip] >= @IPNumber