IP -> Географич. расположение

Тема в разделе "WASM.NETWORKS", создана пользователем ZeroMemory, 29 мар 2005.

  1. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    Может у кого-нить есть уже готовый алг определения георафии по ИП-адресу?

    Спасибо.



    --zeromemory
     
  2. bober

    bober New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    153
    Из результата можно пропарсить "country:" получиш страну вроде тоже география:)



    ;==========================================



    .586

    .model flat, stdcall

    option casemap :none



    include \masm32\include\windows.inc

    include \masm32\include\masm32.inc

    include \masm32\include\user32.inc

    include \masm32\include\kernel32.inc

    include \masm32\include\msvcrt.inc

    include \masm32\include\ws2_32.inc



    includelib \masm32\lib\masm32.lib

    includelib \masm32\lib\user32.lib

    includelib \masm32\lib\kernel32.lib

    includelib \masm32\lib\msvcrt.lib

    includelib \masm32\lib\ws2_32.lib





    .data?

    wsadata WSADATA <>

    pOutText dd ?

    hSocket dd ?

    sin sockaddr_in <>

    exFlg dd ?

    szStrBuff db 100 dup (?)

    strSize dd ?



    .data



    targetIp db "wasm.ru", 0





    szTemplate db "%s",0dh, 0ah,0

    szWhois db 'whois.arin.net',0

    szError db "Error :dntknw:",0

    szrefer db "ReferralServer",0

    szerwe db "whois://",0

    portc dd 43



    .code

    start:



    invoke WSAStartup, 202h,addr wsadata

    invoke gethostbyname, addr targetIp

    .if eax != 0

    mov eax, [eax+0Ch]

    mov eax, [eax]

    mov eax, [eax]

    .else

    jmp @@EXITf

    .endif

    invoke inet_ntoa, eax

    invoke wsprintfA, addr szStrBuff, addr szTemplate, eax

    mov strSize, eax

    invoke malloc, 4000

    mov pOutText, eax

    lea edi, szWhois

    @@begin:

    invoke socket, AF_INET, SOCK_STREAM, 0

    .if eax != -1

    mov hSocket, eax

    mov sin.sin_family, AF_INET

    invoke htons, portc

    mov sin.sin_port,ax

    invoke gethostbyname, edi

    .if eax != 0

    mov eax, [eax+0Ch]

    mov eax, [eax]

    mov eax, [eax]

    mov sin.sin_addr, eax

    .else

    jmp @@EXITf

    .endif

    .endif

    invoke connect, hSocket, addr sin, sizeof sin

    .if eax != -1

    invoke send, hSocket, addr szStrBuff, strSize, 0

    .if eax == -1

    jmp @@EXITf

    .endif

    mov esi, pOutText

    invoke memset, pOutText, 0, 1000

    .while (1)

    invoke recv, hSocket, esi, 1000, 0

    .if (eax != -1) && (eax!= 0)

    add esi, eax

    .else

    .break

    .endif

    .endw

    invoke InString, 1, pOutText, addr szrefer

    .if eax == 0

    mov exFlg, 1

    .endif

    .else

    jmp @@EXITf

    .endif

    .if exFlg != 1

    invoke InString, 1, pOutText, addr szerwe

    dec eax

    mov edi, pOutText

    add eax, edi

    add eax, sizeof szerwe-1

    mov ecx, eax

    mov edi, eax

    xor edx, edx

    .while (1)

    .if byte ptr [ecx] == 20h

    mov [ecx], byte ptr 0

    .break

    .endif

    .if byte ptr [ecx] == ':'

    mov [ecx], byte ptr 0

    inc ecx

    mov edx, ecx

    .while (1)

    .if byte ptr [ecx] == 0ah

    mov [ecx], byte ptr 0

    .break

    .endif

    .if byte ptr [ecx] == 0dh

    mov [ecx], byte ptr 0

    .break

    .endif

    .if byte ptr [ecx] == 20h

    mov [ecx], byte ptr 0

    .break

    .endif

    inc ecx

    .endw

    invoke atoi, edx

    mov portc, eax

    .break

    .endif

    .if byte ptr [ecx] == 0ah

    mov [ecx], byte ptr 0

    .break

    .endif

    .if byte ptr [ecx] == 0dh

    mov [ecx], byte ptr 0

    .break

    .endif

    inc ecx

    .endw

    invoke closesocket, hSocket

    jmp @@begin

    .endif

    @@EXITf:

    .if exFlg == 1

    invoke MessageBox, 0, pOutText, addr targetIp, 0

    .else

    invoke MessageBox, 0, addr szError, addr targetIp, 0

    .endif

    invoke free, pOutText

    invoke closesocket, hSocket

    invoke ExitProcess, 0



    ;##############################################################



    end start
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Загнать таблицу с диапазонами IP в базу и искать потом тривиальным SQL-запросом. Таблицу скачать из сети (на IANA должна быть, вроде). Не забыть перевести IP из формата с точками в целочисленный формат, чтоб упростить базу. Как у этого человека, например. Судя по примеру, этот человек явно был на disavowed.net :)
     
  4. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
  5. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    Спасибо всем, я реализовал и так и так, но наверное все же остановлюсь на предложении Quantum.



    peace, --zm