Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SCANNER DE PORT VB.NET


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Classé sous : scanner, vb, net, scan, port Niveau : Initié Date de création : 13/06/2007 Date de mise à jour : 17/06/2007 12:55:21 Vu / téléchargé: 9 675 / 617

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note

Description

   Ce scanner VB.Net est très lent alors j'éspère que vous pourriez m'aidez à l'optimiser petit à petit ou me dire si c'est la manière qui est pas bonne, merci...
 

Source

  • 'Variable à déclarer
  • Dim host As String
  • Dim port As Integer
  • Dim counter As Integer
  • 'A mettre dans le timer
  • Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  • 'Définition des variable
  • counter = counter + 1 h'counter pour le timer
  • TextBox2.Text = counter
  • host = TextBox1.Text
  • port = TextBox2.Text
  • Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
  • Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
  • Dim s As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
  • System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
  • Try
  • s.Connect(EPhost)
  • Catch
  • End Try
  • If Not s.Connected Then
  • ListBox1.Items.Add("Port " + port.ToString + " est fermé ...")
  • Else
  • ListBox1.Items.Add("Port " + port.ToString + " est ouvert !")
  • ListBox2.Items.Add(port.ToString)
  • End If
  • Label3.Text = "Open Ports: " + ListBox2.Items.Count.ToString
  • End Sub
  • 'Pour le bouton afin de démarrer le scan
  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  • ListBox1.Items.Add("Scanning: " + TextBox1.Text)
  • ListBox1.Items.Add("-------------------")
  • Button2.Enabled = True
  • Button1.Enabled = False
  • Timer1.Enabled = True
  • Timer1.Start()
  • End Sub
  • 'Le bouton pour l'arrêter
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • Button2.Enabled = False
  • TextBox2.Text = "0"
  • 'set counter explained before to 0
  • counter = 0
  • End Sub
  • Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  • 'stop button
  • Timer1.Stop()
  • Timer1.Enabled = False
  • Button1.Enabled = True
  • Button2.Enabled = False
  • End Sub
  • 'Voila on code est assez simple mais surement mal programmé etant donné que très lent,
  • 'J'éspère que sa servira les débutants et que des "pros" pourront m'aider à l'optimser.
  • 'Merci
'Variable à déclarer
 Dim host As String
    Dim port As Integer
    Dim counter As Integer

'A mettre dans le timer
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      'Définition des variable
        counter = counter + 1 h'counter pour le timer
        TextBox2.Text = counter
        host = TextBox1.Text
        port = TextBox2.Text
     
        Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
        Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
        Dim s As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
        System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
        Try
            s.Connect(EPhost)
        Catch
        End Try
        If Not s.Connected Then
            ListBox1.Items.Add("Port " + port.ToString + " est fermé ...")
        Else
            ListBox1.Items.Add("Port " + port.ToString + " est ouvert !")
            ListBox2.Items.Add(port.ToString)
        End If
        Label3.Text = "Open Ports: " + ListBox2.Items.Count.ToString
    End Sub

'Pour le bouton afin de démarrer le scan
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ListBox1.Items.Add("Scanning: " + TextBox1.Text)
        ListBox1.Items.Add("-------------------")
        Button2.Enabled = True
        Button1.Enabled = False
        Timer1.Enabled = True
        Timer1.Start()
    End Sub

'Le bouton pour l'arrêter
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button2.Enabled = False
        TextBox2.Text = "0"
        'set counter explained before to 0
        counter = 0
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'stop button
        Timer1.Stop()
        Timer1.Enabled = False
        Button1.Enabled = True
        Button2.Enabled = False
    End Sub

'Voila on code est assez simple mais surement mal programmé etant donné que très lent,
'J'éspère que sa servira les débutants et que des "pros" pourront m'aider à l'optimser.
'Merci 

Conclusion

Mon soft sera mis à jours au fur et a mesure de vos remarque et de vos conseil afin de le rendre plus rapide.
Sauf bien sûr si c'est une mauvaise méthode pour programmer un scanner en VB.Net.

Remarque ; C'est le seul scanner de port en VB.Net que j'ai put trouver sur ce site (sauf une classe).
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

17 juin 2007 12:55:21 :
Mise en ligne du projet compressé ...

Commentaires et avis

signaler à un administrateur
Commentaire de NHenry le 13/06/2007 16:27:50

Bonjour,

A la place d'utiliser un Timer, utilise un thread (System.Threading), si tu veux un exemple, recherche sur VBFrance, ou va voir sur mon site :
http://nhen0039.chez-alice.fr/

signaler à un administrateur
Commentaire de avatardu062 le 13/06/2007 18:31:13

Merci beaucoup,
je vais essayer de le changer comme sa je verrai si cela augmente la rapidité du scanner.
Si cela marche je réactualiserai ma source :)

signaler à un administrateur
Commentaire de avatardu062 le 13/06/2007 19:04:57

Arf, c'est la première fois que j'utilise les thread je n'arrive pas encore a l'utiliser dans ce cas la, je vais bosser sa ce soir...

signaler à un administrateur
Commentaire de avatardu062 le 13/06/2007 21:05:02

J'ai essayé des tas de technique, je pense qu'il faut utiliser "System.Threading.Timer", je vais penché sur cela.
Pouriez-vous me dire si je suis sur la bonne voix ?

signaler à un administrateur
Commentaire de NHenry le 14/06/2007 08:10:22

Bonjour, presque :

Je pensais plutôt à System.Threading.Thread .

Fais une recherche dans les sources avec le mot "thread", tu verras, tout y est indiqué.

signaler à un administrateur
Commentaire de avatardu062 le 14/06/2007 10:01:32

Ok merci, j'avais fait fausse route avec "System.Threading.Time", je vais m'informer sur Thread, et je modifierai ma source si j'y arrive avec Thread :)

signaler à un administrateur
Commentaire de avatardu062 le 14/06/2007 11:40:13

   J'ai modifié plusieurs choses mais cela ne marche toujours pas, en effet il va vite, il fonctionne, il n'y as pas de probleme mais il me dit tout le temps que les ports sont fermes et je ne comprend pas pourquoi !
   Peut-être va t-il trop vite et il n'as pas le temps de monter une connéxion sauf la première, je sais pas...



Dim StartScan As Integer



    'Variable du scanner
    Dim ScanPort As Integer
    Dim Scan As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)



    Private Sub BackgroundWorkerScan_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerScan.DoWork
        'Définition des variables du Scanner
        Dim host As String
        Dim port As Integer
        Dim BoucleScan As Integer
        Dim CompScan As Integer
        Dim ThreadProgress As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
        Dim ThreadResult As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)

        'Définition ou incrémentation des variables pour le scanner
        host = TextBoxScanIP.Text
        port = TextBoxScanPort.Text
        TextBoxScanPort.Text = ScanPort
        CompScan = 0

        For BoucleScan = 0 To 65000
            CompScan = CompScan + 1
            ScanPort = ScanPort + 1 'ScanPort est pour le timer

            Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
            Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
            Try
                Scan.Connect(EPhost)
            Catch
            End Try
            ThreadProgress.ReportProgress(1)

        Next BoucleScan
    End Sub



    Private Sub BackgroundWorkerScan_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorkerScan.ProgressChanged
        ProgressBarMain.Value = e.ProgressPercentage / 650

        'Définition des variables du Scanner
        Dim host As String
        Dim port As Integer
        Dim CompScan As Integer

        'Définition ou incrémentation des variables pour le scanner
        host = TextBoxScanIP.Text
        port = TextBoxScanPort.Text
        TextBoxScanPort.Text = ScanPort
        CompScan = 0

        If Not Scan.Connected Then
            ListBoxScan1.Items.Add("Port " + port.ToString + " est fermé...")
        Else
            ListBoxScan1.Items.Add("Port " + port.ToString + " est ouvert !")
            ListBoxScan2.Items.Add(port.ToString)
        End If
        lblScanOpenPort.Text = "Ports ouvert : " + ListBoxScan2.Items.Count.ToString
    End Sub

signaler à un administrateur
Commentaire de NHenry le 14/06/2007 13:08:53

Bonjour, explique moi où tu assigne Port dans ta boucle :

    For BoucleScan = 0 To 65000
            CompScan = CompScan + 1
            ScanPort = ScanPort + 1 'ScanPort est pour le timer

            Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
            Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
            Try
                Scan.Connect(EPhost)
            Catch
            End Try
            ThreadProgress.ReportProgress(1)

        Next BoucleScan

?

signaler à un administrateur
Commentaire de avatardu062 le 14/06/2007 13:42:31

For BoucleScan = 1 To 65000
            CompScan = CompScan + 1
            ScanPort = ScanPort + 1 'ScanPort est pour le timer
            port = BoucleScan

            Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
            Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
            Try
                Scan.Connect(EPhost)
            Catch
            End Try
            ThreadProgress.ReportProgress(1)

        Next BoucleScan

   Merci, en effet j'avais oublié d'assigner cette variable, mais il y a 2 problème, le scanner est presque aussi lent qu'avec le Timer (2 port/s), et dès qu'il trouve le premier port ouvert il recommence à speedé sans vérifier si les port sont ouvert :/
   J'avais pourtant réussi à faire un très bon scanner en VB6 (plus de 175 ports/s) mais pour l'instant je n'ai pas une assez bonne connaissance en VB.Net afin d'améliorer se scanner et à mon avis j'utilise une mauvaise méthode...
   Je me pencherai sur le problème ce soir ou demain soir et si cela ne marche pas j'essayerai de trouver une source toute faite, parfois sa fait pas de mal de copier :) afin de mieux comprendre.

   PS: Le scanner marche mais est très lent (2 a 3 ports/s)

signaler à un administrateur
Commentaire de Renfield le 14/06/2007 13:48:36 administrateur CS

pourquoi utiliser cette variable 'port' ? utilsies BoucleScan directement ...

65000 ?? pourquoi pas 65535 ? (ou encoremieux, parcourir entre MinPort et MaxPort

je pense que si c'est lent, c'est parce que tu instancie 65000 objets IPEndPoint
instancie en un, et utilises ses propriétés pour modifier le port, ensuite

voir la doc :
http://msdn2.microsoft.com/fr-fr/library/system.net.ipendpoint_members(VS.80).aspx

NB. prendre mes conseils avec des pincettes, je ne code pas en .Net ^^

signaler à un administrateur
Commentaire de NHenry le 14/06/2007 13:56:14

A la place de n'utiliser qu'une seul Thread, utilises-en plusieurs.

signaler à un administrateur
Commentaire de fdiedler2000 le 14/06/2007 18:01:13

Marche pas cette methode pour tester les ports !

signaler à un administrateur
Commentaire de OneHacker le 15/06/2007 11:36:41

TOute façon t'a oublié le zip car si on doit tout refaire le projet et changer les noms c'est pas terrible.

signaler à un administrateur
Commentaire de avatardu062 le 15/06/2007 21:26:09

Vous avez tous raison, je vais essayer d'utiliser plusieurs thread ainsi que minport et maxport.

signaler à un administrateur
Commentaire de fdiedler2000 le 15/06/2007 23:46:34

Quand ton projet marchera, dis le nous mais vérifie au moins que ca marche :)

++

signaler à un administrateur
Commentaire de avatardu062 le 16/06/2007 18:33:57

   Mon scanner marche, mais est très lent :)

   Dans la semaine je vais refaire le code du début et surement changer de méthode de connéxion, faire une classe et/ou autre chose...

signaler à un administrateur
Commentaire de fdiedler2000 le 16/06/2007 19:55:30

Marche pas chez moi, il me dit que tous mes ports sont fermés alors que c'est pas possible ! Pourquoi ?

signaler à un administrateur
Commentaire de avatardu062 le 17/06/2007 09:15:29

   Si tu utilise le code de base de la source (sans les modifications apportés dans les commentaires) il devrait marcher, j'ai Windows Nt et je l'ai testé sur 2 autre PC que le mien (dont 1 PC portable) et cela marche. Donc si cela ne marche toujours pas chez toi, veut tu m'indiquer qu'elle version as-tu de Windows ? afin que je puisse cherchez l'erreur et/ou maximiser la compatibilité de mes programmes. Merci.

signaler à un administrateur
Commentaire de fdiedler2000 le 17/06/2007 11:19:39

J'ai la version win XP SP2 et ca marche pas :(

signaler à un administrateur
Commentaire de fdiedler2000 le 17/06/2007 11:26:35

j'ai une freebox aussi en mode routeur et j'ai ouvert quelque port pour tester et ton programme dit que tout est fermé. Le port 21 est forcement ouvert puisque je l'utilise pour le FTP...

signaler à un administrateur
Commentaire de avatardu062 le 17/06/2007 13:00:42

   Voila, j'ai mis en ligne la source (de base) à télécharger afin que vous puissez facilement testez la source, la modifier, la comprendre et la compiler ...
   Je n'ai pas travailler le design, je l'ai simplifier au maximum afin de faciliter la compréhension.

signaler à un administrateur
Commentaire de fdiedler2000 le 17/06/2007 13:05:01

Retester marche toujours pas ! Il faut mettre l'IP routeur ou la vrai pour infos ? De toute maniere avec les deux ca marche pas !

signaler à un administrateur
Commentaire de allthew3 le 30/06/2007 11:47:11

merci !
exactement ce que je cherchais !
(bon pour mon utilisation faut modifier des trucs mais ça fonctionne parfaitement !)
merci bien @++

signaler à un administrateur
Commentaire de OneHacker le 30/06/2007 13:48:00

CHez moi ca marche mais les résultats sont aberrants car j'ai réellement que 4 ou 5 ports ouverts et il m'en trouve 6 !

Je vais essayer de l'améliorer. Je te tiens au courant.

signaler à un administrateur
Commentaire de OneHacker le 30/06/2007 13:48:45

Désolé pour le double post mais on peut pas édité.

Il me dit que le port 80 est fermé alors que je suis sur ce site et d'autres sites.

signaler à un administrateur
Commentaire de fdiedler2000 le 30/06/2007 14:08:42

Chez moi aussi ca marche pas les resultats ne sont pas conformes... Exemple port 21 fermé alors que je suis connecté sur mon Ftp !

signaler à un administrateur
Commentaire de allthew3 le 30/06/2007 16:23:00

par contre vous seriez pas comment accéler un peu tout ça ?
multithreading oui mais où ?

merci encore pour la source très utile ^^

signaler à un administrateur
Commentaire de allthew3 le 30/06/2007 16:23:22

PS : 10/10 !

signaler à un administrateur
Commentaire de OneHacker le 30/06/2007 17:10:05

Pour le multithreading déjà j'essaye de faire du monothreading car c'est lent, ne pas passer par un timer mais une boucle dans un thread aussi je vais faire un importation de port et description(idée en regarde le programme NetBrute)

Ensuite vais essayer que le programme puisse détecter l'IP locale(pas l'IP dans le programme qui est une IP locale résau je crois)

Et l'IP FAI(dite publique).

Je vous tiens au courant.

signaler à un administrateur
Commentaire de hvb le 02/07/2007 00:53:40

"Commentaire de : OneHacker le 30/06/2007 13:48:45  Désolé pour le double post mais on peut pas édité.
Il me dit que le port 80 est fermé alors que je suis sur ce site et d'autres sites.
Commentaire de : fdiedler2000 le 30/06/2007 14:08:42  Chez moi aussi ca marche pas les resultats ne sont pas conformes... Exemple port 21 fermé alors que je suis connecté sur mon Ftp !"
(+ d'autres commentaires plus haut)

Heuu un port ouvert, ça sous-entend un port qui attend une connexion entrante... vous parlez de connexions sortantes là.

"Et l'IP FAI(dite publique)."
Une webrequest sur whatismyip.org, ou sur un script php qui fait un bete echo de ton host et le tour est joué.

Enfin pour le threading, c'est le temps de reponse qui est long, pas le traitement du code, donc oui, lancer 5 ou 6 connexions en même temps pourrait être un gros gain de temps.

signaler à un administrateur
Commentaire de hvb le 02/07/2007 00:55:47

remarque, mieux, pourquoi ne pas utiliser la méthode asynchrone BeginConnect...?

signaler à un administrateur
Commentaire de s5gt le 04/10/2007 17:52:22

YO ! ça a l'air bien complex tout ça.
Je suis un débutant, mon code va vous sembler bien pourave.... mais il a l'air de bien fonctionner.
Il est tres lent, vous vous occuperez du threading ( car j'y comprends encore rien )

voila:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'definition des variables

        Dim  i As Integer
        Dim ip As String=textbox1.text
        Dim port As Integer = 130 ' Port de départ
        

        For i = 1 To 15 ' NB de ports a scanner
            Dim s As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
           System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
            Try
                s.Connect(ip, port)
            Catch
            End Try
            If s.Connected Then ' si le port est ouvert
                ListBox1.Items.Add("Port N°= " & port & "  Ouvert")
                s.Close() 'Permet de reutiliser le socket / inutile en l'etat
            Else
                ListBox1.Items.Add("Port N°= " & port & "  Fermé")
                ListBox1.Refresh()
            End If
            port = port + 1
        Next
    End Sub



signaler à un administrateur
Commentaire de yenamarresupilami le 24/06/2009 15:46:24

Merci bien S5GT, après test, ton code fonctionne nickel, c'est exactement ce qu'il me fallait !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

[vb.net ] Imprimante : cherche équivalence de .port en vb en vb.net [ par nakata77 ] Bonjour,Je suis en train de migrer un programme vb en vb.netLe probleme c'est que je n'arrive pas à trouver une équivalence à .port  le .port permet d [Microsoft VB.NET] Utilisation port série [ par darkj57 ] Voila mon problème est tel que j'ai créé un petit programme ( chronomètre) ainsi qu'un boîtier de commande connecté à mon ordinateur par le port de sé Contrôler un port série d’un PC en VB.Net [ par abdel1109 ] Salut, j'ai besoin d'aide à propos du contrôle d'un port série d'un PC par code VB.Net ... ce que j'essai de faire c'est :1 - connecter un « Dynamo » rs232 et vb 2005 net [ par zn415 ] Bonjour, je viens de telecharger et installer vb 2005 express et je souhaiterais utiliser le port serie rs232 pour communiquer avec un microcontroleur Port série sous vb.net [ par SEB73460 ] Bonjour à tous,Je souhaiterai envoyer le contenu d'un textbox sur mon port  "Com1"Je debute en vb.net,est-ce que quelqu'un peu me donner un bout de co port serie et vb.net [ par SEB73460 ] Bonjour et bon dimanche à tous,Voila, apres des recherches de bout de code sur code sources concernant le reception de données via le port serie j'aim VB.net erreur sur l'ouverture d'un port série [ par Carolineitw ] Bonjour,Je suis stagiaire et j'aimerais récupérer des données (position angulaire) par le port série com 1. Voici mon code (hypersimple je sais, mais port serie et modem (vb.net) [ par IhabYktn ] j'ai une application ou j'ai 2 types de connection:-connection via modem.-connection via port serie vers une PIC.et comme vous savez vb.net ne differe VB.NET Port Parallèle XP [ par huongda ] Bonjour à tous !Je viens juste de me mettre à VB.NETJ'ai vu pas mal de posts au sujet du port parallèle (avec la DLL de DriverLinx par exemple), mais rs232 et vb.net [ par mathieuleydier ] bonjourJe cherche à lire des informations d'un gps relié par un port COM à un pda équipé de window ce.net mais apparemment on ne peut pas controler un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.