Salut à toi visiteur !
Inscris toi en moins de 10 secondes pour profitez pleinement du site et partager avec la communauté ! S'inscrire


scanneur d'hôtes


#1
Bonjour,

Je vous présente aujourd'hui mon tout premier code depuis 2012, l'année où j'ai arrêté de coder.
Donc j'ai eu du mal à m'y remettre et j'ai donc décidé de commencer par un code tout simple pour me remettre dans le bain ^^

Voilà la code (à compiler avec Fasm):
Code :
format PE console 5.0
include 'include/windows/win32a.inc'
entry start


;--------------------------------------------------
section '.text' code readable executable
;--------------------------------------------------

start:

    push    NULL
    push    FILE_ATTRIBUTE_NORMAL
    push    OPEN_ALWAYS
    push    NULL
    push    NULL
    push    GENERIC_WRITE
    push    FilePath
    call    [CreateFile]

    mov    [hFile],eax

    push    FILE_END
    push    0
    push    0
    push    [hFile]
    call    [SetFilePointer]
    
    push    wsadata
    push    0x202
    call    [WSAStartup]

    mov    cx,port
    rol    cx,8
    mov    word [sockaddr+2],cx

    mov    [sockaddr],AF_INET

    push    ip_addr
    call    [inet_addr]

    mov    dword [sockaddr+4],eax

     @@:
    push    NULL
    push    lpNumberOfBytesWritten
    push    2
    push    lpBuffer
    push    [hFile]
    call    [WriteFile]

    push    0
    push    0
    push    0
    push    64
    push    host
    push    16
    push    sockaddr
    call    [getnameinfo]

    push    eax
    push    formh
    call    [printf]

    add    esp,8

    mov    edi,host
    call    strlen

    push    NULL
    push    BytesWrite
    push    eax
    push    host
    push    [hFile]
    call    [WriteFile]

    inc    byte [sockaddr+5]
    jnz    @b

    inc    byte [sockaddr+4]
    jnz    @b

    push    [hFile]
    call    [CloseHandle]

    push    0
    call    [ExitProcess]

strlen:
    xor    eax,eax
    xor    ecx,ecx
    not    cx
    cld
    repnz    scasb
    not    cx
    dec    cx
    mov    eax,ecx
    ret

;--------------------------------------------------
section '.data' data readable writeable
;--------------------------------------------------

wsadata WSADATA

FilePath db 'file.txt',0
hFile dd 0
BytesWrite dd 0

lpBuffer db 13,10
lpNumberOfBytesWritten dd 0

ip_addr db '1.1.1.1',0

sockaddr rb 16
host rb 64

port = 13000

formh db '%08x',13,10,0
formd db '%d',13,10,0
forms db '%s',13,10,0
formc db '%c',13,10,0

;--------------------------------------------------
section '.idata' import data readable writeable
;--------------------------------------------------

library kernel32,'kernel32.dll',\
    msvcrt,'msvcrt.dll',\
    user32,'user32.dll',\
    wsock32,'ws2_32.dll'

include 'include\windows\api\kernel32.inc'
include 'include\windows\api\user32.inc'
include    'include\windows\api\wsock32.inc'

import msvcrt,\
printf,'printf',\
sprintf,'sprintf'

C'est un scanneur d'hôte. Tel que présenté ici, si vous le compiler tel quel, il va scanner tout les hôtes de classes A et B et vous renvoyer leur nom de domaine. Donc il va tout scanner de l'ip 1.1.1.1 à l'ip 255.255.1.1
Après, à vous de changer le code pour scanner les autres classes d'ip.
Par exemple pour scanner les hîotes de classe C et D il faut changer "inc    byte [sockaddr+4]" par "inc    byte [sockaddr+6]" et inc    byte [sockaddr+5] par inc    byte [sockaddr+7]
A quoi ça sert me dirait vous ? Et bien à comprendre l'architecture d'un réseau (ce qui est interdit par la loi je vous le rappel). Par exemple je sais exactement combien mon FAI a d'abonnés dans ma ville.. J'ai également tout les noms de domaines de la nasa..
Je n'ai pas fait de GUI car c'est un code fait à la va-vite comme je vous l'ai dit pour me remettre dans le bain.
Si vous avez des questions n'hésitez pas.
++

#2
le scan se fait sur ton réseau local ou sur un réseau plus grand comme un quartier ?

#3
En faite le scan peut se faire sur les deux. Tout dépend de ce que tu rentres comme ip de départ dans "ip_addr".
Mais moi perso je scan sur le WAN uniquement, pas le LAN.
Si tu veux le faire sur le LAN c'est très simple, tu remplaces comme dit ci-dessus "sockaddr+4" par "sockaddr+6" et "sockaddr+5" par "sockaddr+7"
Et comme adresse ip de départ, dans "ip_addr" tu mets 192.168.1.1 (si bien sur ton réseau local commence par 192.168... Sinon tu adaptes.
Et il va te scanner tout les hôtes de 192.168.1.1 à 192.168.255.255
++


Atteindre :