Network scaning

Programmation d'applications complexes
HateBreed
Messages : 13
Inscription : mer. 02/juin/2004 20:55
Localisation : Canada, Québec
Contact :

Network scaning

Message par HateBreed »

un scan port très lent

quelqu'un a un code plus rapide que le mien ou qui pourrais me conseiller de faire de koi pcq j'sais que j'ai pas bien coder parce que le scan des port est vraiment lent j'aimerais gagner en optimisation

Code : Tout sélectionner

Global nb1.w
Global nb2.w
Global status_scan.s

nb1 = 110
nb2 = 1000
status_scan = "off"

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Frame3D_0
  #Text_0
  #String_0
  #Button_0
  #Button_1
  #Listview_0
EndEnumeration

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Procedure scanip(ip.s)
EventID = WaitWindowEvent()
status_scan = "on"
  Repeat
    connectionID = OpenNetworkConnection(ip, nb1)
    If connectionID
      AddGadgetItem(#Listview_0, -1, ip + " port : " + Str(nb1))
      CloseNetworkConnection(ConnectionID)
    EndIf
    nb1 = nb1 + 1
      
    EventID = WaitWindowEvent()
    
  Until nb1 = nb2 Or EventID = #PB_EventCloseWindow
  MessageRequester("Info", "Scan terminé", 0)
  nb1 = 1
EndProcedure

Procedure Open_Window_main()
  If OpenWindow(#Window_0, 297, 34, 237, 300, #PB_Window_SystemMenu | #PB_Window_TitleBar, "Pure Scan Port 0.1")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame3D_0, 4, -2, 230, 80, "Ip")
      TextGadget(#Text_0, 18, 15, 196, 13, "Addresse / IP :")
      StringGadget(#String_0, 18, 28, 204, 17, "")
      ButtonGadget(#Button_0, 127, 50, 45, 20, "Scan", #PB_Button_Default)
      ButtonGadget(#Button_1, 176, 50, 45, 20, "Stop")
      ListViewGadget(#Listview_0, 4, 84, 230, 211)
      
    EndIf
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_EventGadget
      If EventType() = #PB_EventType_LeftClick
        If EventGadgetID() = #Button_0
          scanip(GetGadgetText(#Text_0))
        EndIf
      EndIf
    EndIf
    
  Until EventID = #PB_EventCloseWindow Or status_scan = "on"
  
EndProcedure
Open_Window_main()
thx
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

J'ai modifié ton code à ma façon et il scan plutot vite
Tu peux décendre jusqu'a 0 mais bon...

:lol:

Code : Tout sélectionner

Global nb1.w
Global nb2.w
Global status_scan.s
#Performance_PC_BP=3

nb1 = 110
nb2 = 1000
status_scan = "off"

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Frame3D_0
  #Text_0
  #Text_1
  #String_0
  #Button_0
  #Button_1
  #Listview_0
EndEnumeration

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Procedure scanip(port)
ip.s=GetGadgetText(#String_0)
    ConnectionID=OpenNetworkConnection(ip,port)
     If ConnectionID
      AddGadgetItem(#Listview_0, -1, ip + " port : " + Str(port))
      CloseNetworkConnection(ConnectionID)
    EndIf

  
 
EndProcedure

Procedure gestion()
Repeat
Nb+1
setGadgetText(#Text_1,"Port "+Str(Nb))
Delay(#Performance_PC_BP)
CreateThread(@scanip(),Nb)
Until Nb>=65000
 MessageRequester("Info", "Scan terminé", 0)
EndProcedure

Procedure Open_Window_main()
  If OpenWindow(#Window_0, 297, 34, 237, 300, #PB_Window_SystemMenu | #PB_Window_TitleBar, "Pure Scan Port 0.2 PureSpeed, optimizé par Julien(-;")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame3D_0, 4, -2, 230, 80, "Ip")
      TextGadget(#Text_0, 18, 15, 196, 13, "Addresse / IP :")
      TextGadget(#Text_1, 18, 50, 50, 13, "Port")
      StringGadget(#String_0, 18, 28, 204, 17, "")
      ButtonGadget(#Button_0, 127, 50, 45, 20, "Scan", #PB_Button_Default)
      ButtonGadget(#Button_1, 176, 50, 45, 20, "Stop")
      ListViewGadget(#Listview_0, 4, 84, 230, 211)
     
    EndIf
  EndIf
 
  Repeat
    EventID = WaitWindowEvent()
   
    If EventID = #PB_EventGadget
      If EventType() = #PB_EventType_LeftClick
        If EventGadgetID() = #Button_0
          CreateThread(@gestion(),0)
        EndIf
      EndIf
    EndIf
   
  Until EventID = #PB_EventCloseWindow Or status_scan = "on"
 
EndProcedure
Open_Window_main() 
PS : j'espère que c pas pour scanner le PC de ton voisin ! :roll: :D :D
HateBreed
Messages : 13
Inscription : mer. 02/juin/2004 20:55
Localisation : Canada, Québec
Contact :

Message par HateBreed »

merci :)
maintenant j'connais le thread :P
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

J'avais mis ça dans "Trucs et astuces" il y a seulement une semaine :


La fonction OpenNetworkConnection bloque l'execution du programme pendant 1 à 2 secondes quand le poste que l'on tente de contacter n'est pas présent.
Grâce à FWeil voici une version qui permet d'ajuster le TimeOut (et donc le temps de blocage). Attention ! Si vous diminuez trop #PING_TIMEOUT, vous risquez de "rater" un poste qui est pourtant présent.

Code : Tout sélectionner


Procedure QuickOpenNetworkConnection(sIPAddress.s,Port) 
  ; FWeil & Zapman 
  #PING_TIMEOUT = 500 
  Echo.ICMP_ECHO_REPLY 
  EchoMessage.s = "PingTest " + Space(20) 
  hFile = IcmpCreateFile_() 
  IPAddress=MakeIPAddress(StringField(sIPAddress,1,"."),StringField(sIPAddress,2,"."),StringField(sIPAddress,3,"."),StringField(sIPAddress+".",4,".")) 
  lngResult = IcmpSendEcho_(hFile, IPAddress, EchoMessage, Len(EchoMessage), 0, Echo, SizeOf(ICMP_ECHO_REPLY), #PING_TIMEOUT) 
  If lngResult = 0 
      PingResult = Echo\Status * -1 
    Else 
      PingResult = Echo\RoundTripTime 
  EndIf 
  lngResult = IcmpCloseHandle_(hFile) 
  If PingResult >= 0 
    Result= OpenNetworkConnection(sIPAddress.s,Port) 
  Else 
    Result = 0 
  EndIf 
  ProcedureReturn Result 
EndProcedure 
 
Remplace dans ton code "OpenNetworkConnection" par "QuickOpenNetworkConnection", et là, ça va vraiment aller plus vite !
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Répondre