SCANNER DE PORT VB.NET

NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
- 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
2
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
2
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
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
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
71
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
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
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
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
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
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
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/