首页
社区
课程
招聘
[原创]源码 从纯真IP数据库中提取IP地址段
发表于: 2009-10-5 01:04 7512

[原创]源码 从纯真IP数据库中提取IP地址段

2009-10-5 01:04
7512
因为自己要用,所以就有了以下代码,没做优化大家就将就着看吧!
把纯真IP数据库中的IP地址复制到文件中(注意要点右键全选复制)

                .586
                .model flat, stdcall
                option casemap :none
;----------------------------------------------------------------               
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
include                comdlg32.inc
includelib        comdlg32.lib
include                wsock32.inc
includelib        wsock32.lib

ICO_MAIN        equ        1000
DLG_MAIN        equ        100
       
                .data
               
hInstance                dd                ?       
szSeaveFile                db                'Ipaddr.log',0
szFileName                db                MAX_PATH                dup (?)
@stOF                                        OPENFILENAME        <?>
hFile                        dd                ?
@hFile                        dd                ?
@dwFileSize                dd                ?
@hMapFile                dd                ?
@lpFileMemory        dd                ?
@lpMemory                dd                ?
NumberIp2                dd                ?
lpSize                        dd                ?
Number2                        dd                ?
lpNumber                dd                ?                                        ;写文件时返回的实际写入值
szBuffer                db                51200        dup (?)         ;50KB
szIp2                        db                16                dup (?)
szIp3                        db                16                dup        (?)
szError01                db                "创建线程失败",0

                .code
_Thread                proc        uses        ebx esi edi lParam
               
                                        pushad
                                        invoke         RtlZeroMemory,addr @stOF,sizeof @stOF
                                        mov         @stOF.lStructSize,sizeof @stOF
                                        mov         @stOF.lpstrFile,offset szFileName
                                        mov         @stOF.nMaxFile,MAX_PATH
                                        mov         @stOF.Flags,OFN_EXPLORER+OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST
                                        invoke        GetOpenFileName,addr @stOF
;----------------------------------------------------------------------------------------------------------------------                               
                                        invoke        CreateFile,addr szFileName,GENERIC_READ,FILE_SHARE_READ or \
                                                        FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
                                                        NULL                                                ;打开文件
                                        mov                @hFile,eax
                                        invoke        GetFileSize,eax,NULL                ;获取文件大小
                                        mov                @dwFileSize,eax
                                        invoke        CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
                                        mov                @hMapFile,eax
                                        invoke        MapViewOfFile,eax,FILE_MAP_READ,0,0,0
                                        mov                @lpFileMemory,eax                        ;内存文件视图
                                        mov                eax,@dwFileSize
                                        invoke        GlobalAlloc,GPTR,eax
                                        mov                @lpMemory,eax
;--------------------------------------------------------------------------------------------------------------------------------------
                                        ;处理数据
                                        mov                edi,eax
                                        mov                esi,@lpFileMemory
                                        @04:
                                        cmp                byte ptr [esi],0dh
                                        jz                _Quit
                                        mov                al,byte ptr [esi]
                                        cmp                al,20h
                                        jz                @01
                                        mov                byte ptr [edi],al
                                        inc                esi
                                        inc                edi
                                        jmp                @04
                                        @01:
                                        mov                byte ptr [edi],0
                                        inc                edi
                                        @03:
                                        inc                esi
                                        @05:
                                        cmp                byte ptr [esi],20h
                                        jz                @03
                                        mov                al,byte ptr [esi]
                                        mov                byte ptr [edi],al
                                        inc                esi
                                        inc                edi
                                        cmp                byte ptr [esi],20h
                                        jz                @06
                                        jmp                @05
                                        @06:
                                        mov                word ptr [edi],0
                                        add                edi,2
                                        @07:
                                        inc                esi
                                        cmp                byte ptr [esi],0ah
                                        jnz                @07
                                        inc                esi
                                        jmp                @04
                                        _Quit:               
                                        invoke        UnmapViewOfFile,@lpFileMemory        ;关内存文件视图
                                        invoke        CloseHandle,@hMapFile                ;关内存映射文件对象
                                        invoke        CloseHandle,@hFile                        ;关文件句柄
                                        ;@lpMemory 的内存结构为   IP地址 0 IP地址 00
;---------------------------------------------------------------------------------------
                                        ;对IP地址进行较
                                        invoke        lstrcat,offset szBuffer,@lpMemory
                                        invoke        lstrlen,offset szBuffer
                                        mov                lpSize,eax                                ;字符串大小
                                        lea                esi,szBuffer
                                        add                esi,eax
                                        mov                byte ptr [esi],20h
                                       
                                        mov                eax,@lpMemory
                                        add                eax,lpSize
                                        inc                eax
                                        mov                lpSize,eax
                                Re:
                                        invoke         RtlZeroMemory,offset szIp2,sizeof szIp2
                                        invoke        RtlZeroMemory,offset szIp3,sizeof szIp3
                                        mov                eax,lpSize
                                        invoke        lstrcpy,offset szIp2,eax
                                        invoke        lstrlen,offset szIp2
                                        or                eax,eax                                        ;szIp2等于零说明以到结尾
                                        jz                _Exit
                                        add                eax,lpSize
                                        add                eax,2                                        ;IP后面有两个零
                                        mov                lpSize,eax
                                        invoke        lstrcpy,offset szIp3,eax
                                        invoke        lstrlen,offset szIp3
                                        add                eax,lpSize
                                        inc                eax                                        ;IP后面有1个零
                                        mov                lpSize,eax
;----------------------------------------------------------------------------
                                       
                                        invoke         inet_addr,addr szIp2                        ;把IP字符串转换成网络顺序
                                        invoke         ntohl,eax                                ;网络顺序转本机顺序
                                        push        eax
                                        invoke         inet_addr,addr szIp3
                                        invoke         ntohl,eax
                                        pop                ebx
                                        sub                eax,ebx
                                        cmp         eax,255
                                        jl                Re                        ;小于或不大于时转移
                                       
                                        invoke        lstrcat,offset szBuffer,offset szIp2
                                        invoke        lstrlen,offset szBuffer
                                        lea                esi,offset szBuffer
                                        add                esi,eax
                                        mov                dword ptr [esi],0a0dh        ;插入换行符
                                        invoke        lstrcat,offset szBuffer,offset szIp3
                                        invoke        lstrlen,offset szBuffer
                                        lea                esi,offset szBuffer
                                        add                esi,eax
                                        mov                byte ptr [esi],20h                ;IP地址之间插入空格
                                        jmp                Re
                                       
                                        _Exit:
                                        invoke        GlobalFree,@lpMemory                ;释放申请的内存
                                        invoke        CreateFile,offset szSeaveFile,GENERIC_WRITE,FILE_SHARE_READ,\
                                                        NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
                                        mov                hFile,eax
                                        invoke        lstrlen,offset szBuffer
                                        invoke        WriteFile,hFile,offset szBuffer,eax,addr lpNumber,0
                                        invoke        CloseHandle,hFile
                                        ;invoke        WinExec,offset szSeaveFile,0
                                        popad
                                        ret
_Thread                endp       
                               
_ProcDlgMain        proc        uses ebx edi esi hWnd,wMsg,wParam,lParam

                mov                eax, wMsg
                .if                eax == WM_CLOSE
                                invoke        EndDialog, hWnd, NULL
                .elseif        eax == WM_INITDIALOG
                                invoke        LoadIcon, hInstance, ICO_MAIN
                .elseif        eax == WM_COMMAND
                                mov        eax, wParam
                                .if        ax == IDOK
                                invoke        CreateThread,NULL,0,offset _Thread,\
                                                NULL,0,addr lpNumber
                                .if                !eax
                                                invoke        MessageBox,0,offset szError01,0,MB_OK
                                .endif
                                invoke CloseHandle,eax                ;关闭线程句柄
                                .endif       
                .else       
                                mov                eax,FALSE
                                ret                                               
                .endif                                                               
                mov                eax,TRUE                                       
                ret
_ProcDlgMain        endp       
                               
start:
                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
                invoke        ExitProcess,NULL
end        start

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
原来见过c版的!!!!
2009-10-5 13:26
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
因为自己要用???LZ要写什么呢!~~~
2009-10-5 13:54
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
4
发过vb版本的
2009-10-6 23:01
0
游客
登录 | 注册 方可回帖
返回
//