Petit code pour surveiller les Ports UDP et TCP.

Programmation d'applications complexes
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Petit code pour surveiller les Ports UDP et TCP.

Message par Mytic »

J’avais créer ce code il y’a bien longtemps, et je l’ai trouvé par hasard dans mon DD en cherchant un fichier.
Voilà je le poste si ça intéresse quelqu’un.
:idea:

Code : Tout sélectionner

InitNetwork()
OpenConsole()
PrintN("-----------: Ports actifs :------------")
For i = 0 To 65000
t$ = Inkey()
If t$ <> "":Goto ex:EndIf
ConsoleTitle(Str(i)+" / 65000")
If CreateNetworkServer(0,i,#PB_Network_TCP)
CloseNetworkServer(0)
Else
ConsoleColor(9,0)
PrintN("TCP : " + Str(i))
EndIf
If CreateNetworkServer(0,i,#PB_Network_UDP)
CloseNetworkServer(0)
Else
ConsoleColor(10,0)
PrintN("UDP : " + Str(i))
EndIf
Next i
ex:
ConsoleColor(12,0)
PrintN("Analyse interrompue")
Delay(2000)
CloseConsole()
End
:)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Petit, simple mais utile. :D
Je le met dans ma hotte.

Merci
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Idem, très sympa ce petit code :D
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

:)
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Bonsoir à tous

Mytic, je me suis permis de créer une variante qui me semble plus interéssante, cette version permet de scanner tous les ports des site ou ordinateurs distants et en prime il capture la vraie adresse locale de la cible avec un petit plus: il donne le non du pay de la cible scanné:

Code : Tout sélectionner

Procedure.s left_right_cut(valeur.s)
 
    If Len(valeur)>2 
        valeur = Left(valeur,Len(valeur)-1) 
        valeur = Mid(valeur,2,Len(valeur)) 
            ProcedureReturn valeur 
    EndIf 

EndProcedure 


Procedure.s ip_to_country (db_file.s,ip.s) 

    Protected f.l, ip_val1.l, ip_val2.l ,line.s, ip_string1.s, ip_string2.s, ip_val.l,code_.s 
    
    If ReadFile(f,db_file) 
    
        ip_val = Val(StringField(ip,1,"."))*16777216 + Val(StringField(ip,2,"."))*65536+ Val(StringField(ip,3,"."))*255 +Val(StringField(ip,4,".")) 
        
        
        While Eof(f) = 0 
        
            line = ReadString(f,#PB_Ascii) 
            ip_string1 = left_right_cut(StringField(line,1,",")) 
            ip_string2 = left_right_cut(StringField(line,2,",")) 
            ip_val1 = Val(ip_string1) 
            ip_val2 = Val(ip_string2) 
            
            If ip_val >= ip_val1 And ip_val <= ip_val2 
                ;Debug ip_val 
                code_.s = left_right_cut(StringField(Line,3,",")) 
                    ProcedureReturn code_.s   
            EndIf 
          
        Wend 
        CloseFile(f) 
        
    EndIf 

EndProcedure 



If InitNetwork()

    site_$=InputRequester("Site ciblé","Inscrivez le l'adresse du site que vous ciblez","www.tf1.fr")
 
    OpenConsole()
    ConsoleCursor(10) 
    PrintN("-----------: Ports actifs :------------") 
    PrintN("")
    PrintN(UCase(site_$))
    PrintN("")
    
    For i = 20 To 65000 
        t$ = Inkey() 
        
        If t$ <> ""
            Goto ex
        EndIf
         
        ConsoleTitle("Port :"+Str(i-1)+" / 65000") 
        
        link=OpenNetworkConnection(site_$, i,#PB_Network_TCP)
        
        If link 
            If d=0
                 IP_$=IPString(GetClientIP(link))
                 
                 If IP_$
                    PrintN("IP : "+IP_$)
                    PrintN("pay: "+ip_to_country("C:\BD\ip-to-country.csv",IP_$) )
                    PrintN("")
                    d=1
                 EndIf 
            EndIf
                   
            ConsoleColor(9,0) 
            PrintN("TCP: " + Str(i))
            
            *buffer=AllocateMemory(1000)
            
                If *buffer   
                    ReceiveNetworkData(link, *buffer, 1000)   
                    Block$ = PeekS(*buffer)
                    
                    If Block$
                        ;AddGadgetItem(#Editor_0, -1, Block$)
                        PrintN(Block$)
                    EndIf
                EndIf   
            
            FreeMemory(*buffer)
            PrintN("")
            CloseNetworkConnection(link)         
        EndIf
     
     
     
     
;         link=OpenNetworkConnection(site_$, i,#PB_Network_UDP)
;         
;         If link 
;             If d=0
;                  IP_$=IPString(GetClientIP(link))
;                  
;                  If IP_$
;                     PrintN("IP :"+IP_$)
;                     d=1
;                  EndIf 
;             EndIf
;                    
;             ConsoleColor(10,0) 
;             PrintN("UDP : " + Str(i))
;             
;             *buffer=AllocateMemory(1000)
;             
;                 If *buffer   
;                     ReceiveNetworkData(link, *buffer, 1000)   
;                     Block$ = PeekS(*buffer)
;                     
;                     If Block$
;                         ;AddGadgetItem(#Editor_0, -1, Block$)
;                         PrintN(Block$)
;                     EndIf
;                 EndIf   
;             
;             FreeMemory(*buffer)
;             PrintN("")
;             CloseNetworkConnection(link)         
;         EndIf
    Next i
     
    ex: 
    ConsoleColor(12,0) 
    PrintN("Analyse interrompue") 
    Delay(2000) 
    CloseConsole()
EndIf

End 
par contre il faut récupérer la base de donnée présente: http://ip-to-country.webhosting.info/d ... .csv.zip

que vous placerez dans votre répertoire et une éventuelle modif dans le code pour le chemin de la BD :D

tu m'en diras des nouvels :D
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

@Fortix
Merci pour cette variante, elle apporte un plus énorme (l’IP), et je te félicite pour ça.
Mais y’a un petit inconvénient, cette fois le programme est ciblé, et moins général, Bon ! C’est le travail du par feu ça.
J’ai une petite remarque à faire, c’est très lent ?!

Je pense que tu gagneras en vitesse si tu garde le principe du CreateNetworkServer , et si le server n’arrive pas à se crée ,donc à ce moment il ouvre un OpenNetworkConnection.
Pour un GetData.
Sinon pour le reste Bravo.
:)
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Le seul problème avec les commandes de connexion de PureBasic , c’est le temps d’attente de 10s.
Si seulement on pouvait le désactivé.

Je vais crée un autre code avec l’API Winsock.
:?
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Ha, très bonne idée "Winsock" :D ,
Répondre