SCANNER DE PORT VB.NET

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 13 juin 2007 à 16:27
yenamarresupilami Messages postés 1 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 24 juin 2009 - 24 juin 2009 à 15:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43104-scanner-de-port-vb-net

yenamarresupilami Messages postés 1 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 24 juin 2009
24 juin 2009 à 15:46
Merci bien S5GT, après test, ton code fonctionne nickel, c'est exactement ce qu'il me fallait !
s5gt Messages postés 6 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 5 octobre 2007
4 oct. 2007 à 17:52
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
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
2 juil. 2007 à 00:55
remarque, mieux, pourquoi ne pas utiliser la méthode asynchrone BeginConnect...?
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
2 juil. 2007 à 00:53
"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.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
30 juin 2007 à 17:10
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.
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
30 juin 2007 à 16:23
PS : 10/10 !
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
30 juin 2007 à 16:23
par contre vous seriez pas comment accéler un peu tout ça ?
multithreading oui mais où ?

merci encore pour la source très utile ^^
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
30 juin 2007 à 14:08
Chez moi aussi ca marche pas les resultats ne sont pas conformes... Exemple port 21 fermé alors que je suis connecté sur mon Ftp !
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
30 juin 2007 à 13:48
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.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
30 juin 2007 à 13:48
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.
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
30 juin 2007 à 11:47
merci !
exactement ce que je cherchais !
(bon pour mon utilisation faut modifier des trucs mais ça fonctionne parfaitement !)
merci bien @++
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 juin 2007 à 13:05
Retester marche toujours pas ! Il faut mettre l'IP routeur ou la vrai pour infos ? De toute maniere avec les deux ca marche pas !
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
17 juin 2007 à 13:00
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.
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 juin 2007 à 11:26
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...
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 juin 2007 à 11:19
J'ai la version win XP SP2 et ca marche pas :(
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
17 juin 2007 à 09:15
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.
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
16 juin 2007 à 19:55
Marche pas chez moi, il me dit que tous mes ports sont fermés alors que c'est pas possible ! Pourquoi ?
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
16 juin 2007 à 18:33
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...
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
15 juin 2007 à 23:46
Quand ton projet marchera, dis le nous mais vérifie au moins que ca marche :)

++
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
15 juin 2007 à 21:26
Vous avez tous raison, je vais essayer d'utiliser plusieurs thread ainsi que minport et maxport.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
15 juin 2007 à 11:36
TOute façon t'a oublié le zip car si on doit tout refaire le projet et changer les noms c'est pas terrible.
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
14 juin 2007 à 18:01
Marche pas cette methode pour tester les ports !
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 juin 2007 à 13:56
A la place de n'utiliser qu'une seul Thread, utilises-en plusieurs.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 juin 2007 à 13:48
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 ^^
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
14 juin 2007 à 13:42
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)
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 juin 2007 à 13:08
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

?
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
14 juin 2007 à 11:40
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
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
14 juin 2007 à 10:01
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 :)
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 juin 2007 à 08:10
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é.
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
13 juin 2007 à 21:05
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 ?
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
13 juin 2007 à 19:04
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...
avatardu062 Messages postés 19 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 24 octobre 2007
13 juin 2007 à 18:31
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 :)
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
13 juin 2007 à 16:27
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/
Rejoignez-nous