Page 1 sur 1
[..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 11:51
par Jerome
Coucou,
Pour les besoin d'un de mes scripts, j'ai besoin de savoir si derrière une IP il y a un post informatique.
Pour le moment, je fais comme sa, mais c'est plutôt long :
Code : Tout sélectionner
$ping = Ping($strComputer & $for,50)
if $ping > 0 Then
If FileExists("\\" & $strComputer & $for & "\c$\") = 1 Then
En gros je test si il y a un c$.
C'est assez long comme étape et sa coince du coup pour ce que je veux faire, quelqu'un connaîtrait un moyen de savoir si l'ip concerner est un poste informatique ?
Jérôme

Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 11:56
par mikell
La ligne seule (sans le ping)
Code : Tout sélectionner
If FileExists("\\" & $strComputer & $for & "\c$\") = 1 Then...
ne suffirait pas ?
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 11:59
par Jerome
Ba, au final, mon ping a un timout de 50 ms donc bon, c'est pas hyper gênant, c'est le fileexiste qui prend super longtemps.
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 13:21
par mikell
Jerome a écrit :Ba, au final, mon ping a un timout de 50 ms donc bon, c'est pas hyper gênant, c'est le fileexiste qui prend super longtemps.
Là tu te trompes, teste ce script, tu verras que ton timeout ne sert à rien en cas d'échec du ping
Code : Tout sélectionner
$begin = TimerInit()
$ping = Ping("www.nonexists.argh", 50)
Msgbox(0,"", "@error = " & @error &@crlf & Round(TimerDiff($begin)/1000) & " secondes")
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 13:21
par sksbir
En absolu, c'est impossible : le ping te dis seulement si la machine est active, et encore, à condition d'avoir autorisé le départ de trames ICMP depuis la carte réseau.
Tu peux éventuellement deviner à quoi tu as affaire en supposant que tes 'postes informatiques' ( sous entendu : PC sous windows vu qu'il existe un C$ ) offrent un certain nombres de services réseaux qui permettent de les distinguer les uns des autres : les serveurs sous UNIX offrent un service ssh que n'offrent pas les PC sous windows...
Bref, tout ceci dépend principalement de ce qui existe sur ton réseau. La meilleure méthode consiste à tenir un inventaire du parc informatique
Sinon, pour la méthode que tu as retenu : je ne crois pas que tu puisses changer le timeout en cas de non-réponse...
Par contre, tu pourrais tenter d'écrire un programme qui se forke en autant de sous-programmes qui tournent en // et qui auscultent chacun un nom de machine ( avec des limites sur le nombre de forks ), en te basant sur ceci :
[Ex] Script réentrant
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 13:32
par Jerome
mikell a écrit :Jerome a écrit :Ba, au final, mon ping a un timout de 50 ms donc bon, c'est pas hyper gênant, c'est le fileexiste qui prend super longtemps.
Là tu te trompes, teste ce script, tu verras que ton timeout ne sert à rien en cas d'échec du ping
Code : Tout sélectionner
$begin = TimerInit()
$ping = Ping("www.nonexists.argh", 50)
Msgbox(0,"", "@error = " & @error &@crlf & Round(TimerDiff($begin)/1000) & " secondes")
Coucou,
Peut être, mais au final toujours non, puisque toute ma plage d'adresse IP contient des éléments informatiques qui vont répondre au ping.
Clairement ce qui me prend du temps, c'est le fileexists.
Partager en sous script, sa m’intéresse pas trop dsl ..
Exemple :
Code : Tout sélectionner
local $timerping = TimerInit()
$ping = Ping($strComputer & $for,50)
ConsoleWrite($strComputer & $for & " ping en : " & TimerDiff($timerping) & @crlf)
if $ping > 0 Then
local $timerexist = TimerInit()
If FileExists("\\" & $strComputer & $for & "\c$\") = 1 Then
ConsoleWrite($strComputer & $for & "existe en : " & TimerDiff($timerexist) & @crlf)
Résulat :
Code : Tout sélectionner
192.168.120.200 ping en : 15.2880851939911
192.168.120.200existe en : 154.053963114009
192.168.120.201 ping en : 2.06905558562314
192.168.120.201existe en : 2591.58565051781
192.168.120.202 ping en : 2.3490738580986
192.168.120.202existe en : 20.1276678013775
192.168.120.203 ping en : 2.52358626416274
192.168.120.203existe en : 60.085876072239
192.168.120.204 ping en : 2.35420657592402
192.168.120.204existe en : 49.8107452877373
192.168.120.205 ping en : 2.36561261553605
192.168.120.205existe en : 31.587315799589
192.168.120.206 ping en : 2.42891613538285
192.168.120.206existe en : 27.8752202078523
192.168.120.207 ping en : 2.16201480846123
192.168.120.207existe en : 7471.12931768501
192.168.120.208 ping en : 2.65019330385632
192.168.120.208existe en : 126.488416881623
192.168.120.209 ping en : 2.79447970494857
192.168.120.209existe en : 141.800454758799
Parfois on a 7seconde, et c'est sa qui me fou dedans.
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 13:34
par sksbir
Jerome a écrit :.... puisque toute ma plage d'adresse IP contient des éléments informatiques qui vont répondre au ping.
C'est de ça que tu pars ? d'une plage d'adresse IP ?
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 13:42
par Jerome
J'ai édit mon post d'avant.
Mais oui, je fait mon test sur un range de 10 / 20 / 30 adresse IP, et toutes répondent.
Exemple : J'ai une imprimante en 192.168.120.53
Si je test dessus, le ping est aux alentours de "ping en : 3.18228505175776"
Par contre, le temps qu'il me fasse le fileexiste, sur une imprimante (ce qui n'est pas possible), la y a facilement 12/20 secondes.
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 15:07
par sksbir
......
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 16:28
par mikell
Si c'est le FileExists qui est long, _Net_Share_ShareEnum() ou un check wmi Win32_Share n'irait pas ?
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 16:37
par Jerome
Je viens de test.
_Net_Share_ShareCheck => 38681.2576527397
Win32_Share => pareil sensiblement.
Donc raté :p
Faite le test chez vous, essayer juste de voir sur une adresse IP bidon le temps qu'il met pour vous dire que le répertoire existe pas.
Je tiens a préciser que si ya un autre moyen que par un check du c$ de faire sa, je suis preneur
Une belle fonction IsComputer() xD ?
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 18:44
par mikell
Jerome a écrit :Faite le test chez vous, essayer juste de voir sur une adresse IP bidon le temps qu'il met pour vous dire que le répertoire existe pas
Hm je pensais que si le but était juste de savoir si l'IP correspondait ou non à un poste, un tri des constantes renvoyées par _Net_Share_ShareEnum suffirait à avoir le renseignement, sans test de présence de répertoire

Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 19:23
par Jerome
Oui mais moi mon but c'est de lister tous les postes de mon réseau.
Donc avant d'envoyer du class WMI sur une IP, jregarde si c'est un PC déjà ^^
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 21:09
par Iste
Bah comme dit, je pense qu'il faut plutôt essayer de voir si il y aurait pas un soft réseau commun a toute ces machines que l'on pourrait exploiter.
Pas de bureau distant par exemple ?
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 21:12
par Jerome
Nop, y'a vraiment rien de commun à tous ces postes, hormis qu'il sont sur le même sous réseau ^^
Jérôme
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 21:23
par Iste
Bah sinon tu peux essayer ca, faut le mettre en double avec un ping quand meme
Code : Tout sélectionner
TCPStartup()
opt("TCPTimeout", 1000)
$begin = TimerInit()
$ip = "192.168.1.1"
$soc = TCPConnect($ip, 139)
$error = @error
TCPCloseSocket($soc)
Msgbox(0,"", "error = " & @error & @CRLF & TimerDiff($begin)) ;if $error == o then c'est ok
TCPShutdown()
Ca teste juste d'ouvrir une connexion sur un des port de partage, si ca marche -> pc, si ca marche pas -> pas pc, mais si ca tape dans le vide -> tres lent :s
Ca fait bien la dif entre mon ordi et mon tel, mais quand je tape mon routeur, c'est parti pour 10secondes :s
a voir donc si tes "pas pc" répondent comme mon tel, ou comme mon routeur...
Re: [..] Detecter si une IP est un poste informatique.
Posté : ven. 09 mars 2012 21:42
par SurPriseS
http://www.nirsoft.net/utils/wake_on_lan.html
En analysant les résultat de ce logiciel, y'a surement moyen de savoir qui est quoi, au moins pour beaucoup de machine je pense

Re: [..] Detecter si une IP est un poste informatique.
Posté : sam. 10 mars 2012 00:04
par Jerome
Effectivement,
Il y a des soft qui te check une plage de 250 ip en 10 s chrono, et c'est terrible (advanced ip scanner que j'utilise).
Le but de mon script est de faire la même, sauf que je peux choisir ce que je veux en retour (dans mon cas, treeview avec toute les cartes réseaux présentes, IP, gateway, mask, MAC adresse, type, DHCP ou non, interface).
Pas encore test ton idée Iste, mais c'est vrai que du 10 s, sa va patauger, mais c'est toujours mieux que 36 s.
Je ne pourrait tester que lundi maintenant.
Jérôme