Page 1 sur 1

Network scaning

Publié : jeu. 03/juin/2004 18:15
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

Publié : jeu. 03/juin/2004 19:04
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

Publié : jeu. 03/juin/2004 19:55
par HateBreed
merci :)
maintenant j'connais le thread :P

Publié : jeu. 03/juin/2004 23:01
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 !