Scanner multi ports et de plages ip (configurable)

Soyez le premier à donner votre avis sur cette source.

Vue 6 800 fois - Téléchargée 1 323 fois

Description

Petit scanner permettant de scanner plusieurs ports simultanéments sur sa machine ou sur une machine distante. Permet aussi de scanner une plage d'adresses ip et résoud le nom dns des machines. Options de configuration incluses. C'est la première appli que j'ai développé en VB. Présenté en action professionnel dans le cadre de mon BTS en alternance (j'ai eu 18,5 ;)).
Je développe un version pour vb.net effectuant du multithread, ce qui permettra de scanner plusieurs ip simultanément...

Source / Exemple :


Voici une partie du code:

Private Sub Check1_Click()
Text8.Text = "1"
Text9.Text = "65535"
End Sub

Private Sub Command1_Click()
      Dim bADRESSE_VALIDE, bFIN_SCAN_IP As Boolean
      Dim nNB_IP_A_SCANNER, nTTL As Long
      Dim nNB_ADRESSES_RESOLUES As Long
      'd = départ f = fin c = cours
      Dim d1, d2, d3, d4, f1, f2, f3, f4, c1, c2, c3, c4 As Integer
      d1 = Val(Text11.Text)
      d2 = Val(Text12.Text)
      d3 = Val(Text13.Text)
      d4 = Val(Text14.Text)
      f1 = Val(Text15.Text)
      f2 = Val(Text16.Text)
      f3 = Val(Text17.Text)
      f4 = Val(Text18.Text)
      
      
    nNB_ADRESSES_RESOLUES = 0
    bADRESSE_VALIDE = False
    bFIN_SCAN_IP = False
    'vérification des adresses ip saisies
    If Not ((d1 <= 0) Or (d1 > 239) Or (f1 <= 0) Or (f1 > 239)) Then
      If Not ((d2 < 0) Or (d2 > 255) Or (f2 < 0) Or (f2 > 255)) Then
         If Not ((d3 < 0) Or (d3 > 255) Or (f3 < 0) Or (f3 > 255)) Then
            If Not ((d4 < 0) Or (d4 > 255) Or (f4 < 0) Or (f4 > 255)) Then
               If f1 > d1 Then
                  bADRESSE_VALIDE = True
               Else
                 If f1 = d1 Then
                    If f2 > d2 Then
                       bADRESSE_VALIDE = True
                    Else
                       If f2 = d2 Then
                          If f3 > d3 Then
                             bADRESSE_VALIDE = True
                          Else
                             If f3 = d3 Then
                                If f4 >= d4 Then
                                   bADRESSE_VALIDE = True
                                End If
                             End If
                          End If
                       End If
                    End If
                 End If
               End If
            End If
         End If
      End If
    End If
    
    If Not bADRESSE_VALIDE Then
      ok = MsgBox("Adresses saisies invalides", 16, "STOP")
      Exit Sub
    End If
      
  Label16.Visible = False
  MSHFlexGrid1.Clear
  Command1.Enabled = False
  Label2.Visible = True
  Label15.Visible = True
  Label17.Visible = True
  ProgressBar2.Visible = True
  MSHFlexGrid1.Visible = True
  MSHFlexGrid1.ColWidth(0) = 1450
  MSHFlexGrid1.ColWidth(1) = 2500
    
  c1 = d1
  c2 = d2
  c3 = d3
  c4 = d4
  ProgressBar2.Value = 0
  ProgressBar2.Min = 0
  nNB_IP_A_SCANNER = (f4 - d4) + ((f3 - d3) * 255) + ((f2 - d2) * 255 ^ 2) + ((f1 - d1) * 255 ^ 3) + (f3 - d3) + 1 + ((f2 - d2) * 511) + ((f1 - d1) * 195841)
  ProgressBar2.Max = nNB_IP_A_SCANNER
  
  While Not (bFIN_SCAN_IP Or Command1.Enabled)
       
        DoEvents
        ProgressBar2.Value = ProgressBar2.Value + 1
        Label15.Caption = Str(c1) & "." & Str(c2) & "." & Str(c3) & "." & Str(c4)
        TTL = Pingocx(0).Ping(c1 & "." & c2 & "." & c3 & "." & c4)
        If TTL >= 0 Then
           nNB_ADRESSES_RESOLUES = nNB_ADRESSES_RESOLUES + 1
           MSHFlexGrid1.Rows = nNB_ADRESSES_RESOLUES
           MSHFlexGrid1.Row = nNB_ADRESSES_RESOLUES - 1
           MSHFlexGrid1.Col = 0
           MSHFlexGrid1.Text = c1 & "." & c2 & "." & c3 & "." & c4
           MSHFlexGrid1.CellAlignment = flexAlignLeftCenter
           If Check2.Value = 1 Then
              MSHFlexGrid1.Row = nNB_ADRESSES_RESOLUES - 1
              MSHFlexGrid1.Col = 1
              MSHFlexGrid1.Text = Pingocx(0).ToNom(c1 & "." & c2 & "." & c3 & "." & c4)
              MSHFlexGrid1.CellAlignment = flexAlignLeftCenter
           End If
           
           MSHFlexGrid1.Col = 2
           MSHFlexGrid1.Text = Val(TTL)
           MSHFlexGrid1.CellAlignment = flexAlignLeftCenter
        End If
        If (c1 = f1) And (c2 = f2) And (c3 = f3) And (c4 = f4) Then
           bFIN_SCAN_IP = True
        End If
        'incrémentation de l'adresse ip
        If c4 < 255 Then
           c4 = c4 + 1
        Else
           c4 = 0
           If c3 < 255 Then
              c3 = c3 + 1
           Else
              c3 = 0
              If c2 < 255 Then
                 c2 = c2 + 1
              Else
                 c2 = 0
                 If c1 < 240 Then
                    c1 = c1 + 1
                 End If
              End If
           End If
        End If
  
  Wend
  Command1.Enabled = True
  Label2.Visible = False
  Label15.Visible = False
  If bFIN_SCAN_IP Then
     Label16.Visible = True
  End If
End Sub
    
Private Sub Command2_Click()
  If Command1.Enabled = False Then
     ProgressBar2.Visible = False
     Label2.Visible = False
     Label15.Visible = False
     Command1.Enabled = True
End If
End Sub

Private Sub Command3_Click()
    nMAX_PORT_SIMULT = Val(Text10.Text)
    nPORT_DEBUT = Val(Text8.Text)
    nPORT_FIN = Val(Text9.Text)
    nPORT_COURS = nPORT_DEBUT
    Label11.Visible = False
    'Test de valiité des informations saisies
    
    If nPORT_DEBUT = 0 Or nPORT_FIN = 0 Then
       ok = MsgBox("Les ports de début et de fin doivent être renseignés", 16, "STOP")
       Exit Sub
    End If
    If nPORT_FIN < nPORT_DEBUT Then
       ok = MsgBox("Le port de fin doit être supérieur au port de début de scan", 16, "STOP")
       Exit Sub
    End If
    
    
    ProgressBar1.Min = nPORT_DEBUT
    ProgressBar1.Max = nPORT_FIN + 0.1
    List1.Clear
    ProgressBar1.Visible = True
    List1.Visible = True
    Label12.Visible = True
    Label13.Visible = True
    Command3.Enabled = False
    
    'chargement des winsocks utilisés simultanéments
    For i = 1 To nMAX_PORT_SIMULT
       Load Winsock(i)
    Next i
    
    While nPORT_COURS <= nPORT_FIN And Command3.Enabled = False
          For j = 1 To nMAX_PORT_SIMULT
              DoEvents
              If nPORT_COURS = nPORT_FIN + 1 Or Command3.Enabled = True Then
                 GoTo FIN
              End If
              ProgressBar1.Value = nPORT_COURS + 0.1
              'si le winsock n'est pas encore libéré
              If Winsock(j).State <> 0 Then
                 GoTo PORT_SUIVANT
              End If
              Winsock(j).RemoteHost = Text7.Text
              Winsock(j).RemotePort = nPORT_COURS
              Winsock(j).Connect
              Label13.Caption = Str(nPORT_COURS)
              nPORT_COURS = nPORT_COURS + 1
PORT_SUIVANT:
          Next j
    Wend
FIN:
      
    'Puis on décharge les objets chargés
    For k = 1 To nMAX_PORT_SIMULT
        Unload Winsock(k)
    Next k
    Command3.Enabled = True
    Label12.Visible = False
    Label13.Visible = False
    If nPORT_COURS > nPORT_FIN Then
      Label11.Visible = True
    End If
    
End Sub

Private Sub Command4_Click()
If Command3.Enabled = False Then
   ProgressBar1.Visible = False
   Label12.Visible = False
   Label13.Visible = False
   Command3.Enabled = True
End If
End Sub

Private Sub DBGrid1_Click()

End Sub

Private Sub configuration_Click()

End Sub

Private Sub Command5_Click()
  Dim cADR_IP, cIP1, cIP2, cIP3 As String
  cADR_IP = Trim(Winsock(0).LocalIP)
  cIP1 = Mid(cADR_IP, 1, InStr(cADR_IP, ".") - 1)
  cADR_IP = Mid(cADR_IP, Len(cIP1) + 2)
  cIP2 = Mid(cADR_IP, 1, InStr(cADR_IP, ".") - 1)
  cADR_IP = Mid(cADR_IP, Len(cIP2) + 2)
  cIP3 = Mid(cADR_IP, 1, InStr(cADR_IP, ".") - 1)
  Text11.Text = cIP1
  Text15.Text = cIP1
  Text12.Text = cIP2
  Text16.Text = cIP2
  Text13.Text = cIP3
  Text17.Text = cIP3
  Text14.Text = "1"
  Text18.Text = "255"
  
End Sub

Private Sub Form_Load()
go = Shell("regsvr32 ping.ocx /s", 0)
End Sub

Private Sub HScroll1_Change()
  Text10.Text = Str(HScroll1.Value)
End Sub

Private Sub Pingocx1_GotFocus(Index As Integer)

End Sub

Private Sub quitter_Click()
  Form1.Hide
  Unload Form1
End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)
  Label17.Visible = False
  MSHFlexGrid1.Visible = False
  Label16.Visible = False
  ProgressBar2.Visible = False
  Label2.Visible = False
  Label15.Visible = False
  Command1.Enabled = True
  Label11.Visible = False
  ProgressBar1.Visible = False
  Command3.Enabled = True
  List1.Visible = False
  Label12.Visible = False
  Label13.Visible = False
  List1.Visible = False
  'Text11.Text = ""
  'Text12.Text = ""
  'Text13.Text = ""
  'Text14.Text = ""
  'Text15.Text = ""
  'Text16.Text = ""
  'Text17.Text = ""
  'Text18.Text = ""
  'Text9.Text = ""
  'Text8.Text = ""
  'Text7.Text = "127.0.0.1"
  'Check1.Value = 0
End Sub

Private Sub Timer1_Timer()
  Text1.Text = Winsock(0).LocalHostName
  Text3.Text = Winsock(0).LocalIP
  Text4.Text = MACAddress
End Sub

Private Sub Winsock_Connect(Index As Integer)
  List1.AddItem ("[OUVERT] PORT: " & Winsock(Index).RemotePort)
  Winsock(Index).Close
End Sub
Private Sub Winsock_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  Winsock(Index).Close
End Sub

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
12 avril 2004

merci pour ton code
Messages postés
163
Date d'inscription
samedi 2 août 2003
Statut
Membre
Dernière intervention
4 novembre 2013
12
salut Iceprog j ai une toute petite remarque c est que si tu vx que ton scanneur soit éfficace 100% il faut pas fixé son delai de réponse tu doit le laisser scanner normalement c est vrai que ca seras un peu lent mais plus éfficace.
c est tt :)
Messages postés
3
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
30 juillet 2004

GG pour cette aplication mais j'ai 2, 3 ptites questions. Comme je suis pas très doué en informatique (j'utilise mais ne conçoit pas, enfin, pour l'instant :D)
Ben voila, est-ce que tu pourais me dire si ce que tu a fait est mieux que le programme grimsping?
Sinon, c'est normal que c'est très long chez moi, enfin sa controle environ 1 ip toute les 10 secondes (en gros, voir plus...)?
Enfin, meme si ces questions sont assez "négative", je trouve que c'est de l'excellent boulot car je n'aurais pas fait mieux, enfin, je n'aurais pas fait tout cour :D !!
Messages postés
2
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
12 décembre 2003

lcprog> merci pour ton aide ! merci aussi d'avoir répondu à mon mail avec ... rapidité ! s'pô grave poulet. En tout cas, ça va bcp me servir. j'avais pas envie de passer du temps pour en faire un. C'est à ce moment là que j'ai pensé à toi. Encore merci à toi.

He ! Vous autres, vous avez à faire à un (lcprog) ancien BTS IG en alternance ! et je peux vous dire qu'il est pratiquement sorti major de promo... sans faire grand chose ! c'est une bête !
encore bravo.
Messages postés
41
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
11 septembre 2006

Le fichier ocx est un contrôle activeX développé par un tiers. Il contient des méthodes permettant d'effectuer des pings via ICMP.DLL.
Je préférais passer par cet outil plûtot que d'impémenter un module faisant appel à tout pleins d'api.

pluplu si le scanner ne voit pas tes machines c'est peut être parce que le délaie de réponse maximale est fixé à 200 ms.

Sinon pour le timer.. j'ai un peu honte :) c'est que je n'arrivais pas à afficher l'adresse MAC de la carte réseau dès l'initialisation du formulaire. J'ai pas pensé à corriger ce problème. J'avais du développer cette appli rapidement car c'était dans le cadre d'un examen que j'ai préparé comme 99% d'entre nous au dernier moment :)
Et c'est vrai que niveau interface c'est pas terrible, mais je n'aime pas trop le vb (le 6 en tout cas).

Bonne bourre...
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.