Question Netstat : Formatage en tableau d'objets

Plus d'informations
il y a 3 ans 6 mois #23637 par Sayz
Bonjour à tous,

Jeune ingénieur en IT, je cherches à renouer avec la programmation presque délaissé depuis mes années DUT R&T pour privilégiez, le système en GUI (Haha) et pas mal de réseau. Quoi de mieux que de la \"progra systéme\" dans mon cas ?

Désolé pour les conneries, en guise de présentation (first post), qui précédent. J'ai des vraies questions. ^^

Je me suis mis en tête de récupérer le résultat de netstat sous forme de log, cependant le formatage prédéfini lors de l'ajout des certaines options (par exemplenetstat -aob) est vraiment dégeulasse. Et en plus je voulais toucher au formatage du texte pour découvrir.

Objetcif du code :

L'idée générale de travailler sur une ligne, en extraire les chaines de caractères et les ranger dans des objets
celon l'ordre de rencontre du \"mots\". C'est éléments seront regroupés sous forme d'objet qui seront transmis à un tableau pour la présentation.


Résultat netstat -aob :

[LeagueClient.exe]
TCP 127.0.0.1:50031 DESK-HOME-BRICE:50049 ESTABLISHED 1992
[LeagueClient.exe]
TCP 127.0.0.1:50032 DESK-HOME-BRICE:50031 ESTABLISHED 12024
[LeagueClientUx.exe]
TCP 127.0.0.1:50046 DESK-HOME-BRICE:50031 ESTABLISHED 12024
[LeagueClientUx.exe]
TCP 127.0.0.1:50049 DESK-HOME-BRICE:50031 ESTABLISHED 12024
[LeagueClientUx.exe]
TCP 127.0.0.1:50325 DESK-HOME-BRICE:50326 ESTABLISHED 7392
[System]
TCP 127.0.0.1:50326 DESK-HOME-BRICE:50325 ESTABLISHED 7392
[System]
TCP 172.16.0.100:52276 134.170.178.9:https ESTABLISHED 9532
[System]
TCP 172.16.0.100:52277 ec2-54-225-100-50:http ESTABLISHED 7392
[System]
TCP 172.16.0.100:52280 clienthosting:http TIME_WAIT 0
TCP 172.16.0.100:52281 clienthosting:http TIME_WAIT 0
TCP 172.16.0.100:52282 clienthosting:http TIME_WAIT 0
TCP 172.16.0.100:52283 clienthosting:http TIME_WAIT 0
TCP 172.16.0.100:52284 clienthosting:http TIME_WAIT 0
TCP 192.168.190.1:139 DESK-HOME-BRICE:0 LISTENING 4
Impossible d'obtenir les informations de propri‚taire
TCP 192.168.230.1:139 DESK-HOME-BRICE:0 LISTENING 4
Impossible d'obtenir les informations de propri‚taire


Problématique :
1. Le netstat -aob renseigne l'application (Executables qui utilise ses ports) et les informations des ports (IP local, Distante, Port ..) sur des lignes différentes. Je voudrais donc donner à chaque ligne d'information ports l'application a laquelle elle est lié.
2. La problématique est lié mais comment affecter dans un foreach (traitement ligne par ligne d'une collection d'objet une information qui provient d'un autre ligne..

Illustration :
Genre :
Ligne1 : [LeagueClientUx.exe]
Ligne2 : TCP 127.0.0.1:50032 DESK-HOME-BRICE:50031 ESTABLISHED 12024

--> Creer un objet avec les 5 paramètres de la de ligne 2 et aussi le paramètre de la ligne 1




Voici mon bout de code. J'ai essayé de de commenter un peu (très peu)

$tableau = @()
$file = netstat -aob

$file = $file -replace(\" \",\" \")
$file = $file -replace(\" \",\" \")
$file = $file -replace(\" \",\" \")
$file = $file -replace(\" - \",\" \")



#L'idée générale de travailler sur une ligne, en extraire les chaines de caractéres et les ranger dans une des colonnes
# celon l'ordre de rencontre du \"mots\". C'est éléments seront regoupés sous forme d'objet

foreach ($ligne in $file)
{
$lignetrait = $ligne -split(\" \")
{

$lignetrait2 = $ligne -split(\" \")

#If provisoire pour filtre via les protocoles qui m’intéresse (Non définitif, tests de conditions combinées)
if (([string]$lignetrait2[1] -match \"TCP\" -or [string]$lignetrait2[1] -match \"UDP\") -and ([string]$lignetrait2[1] -notmatch \"Impossible\"))
{

#Ce If pour regler un probléme de décalage d'un ou plusieurs espaces plus ou moins aléatoires.. Sur le [3]
#C'est du bidoulage bourrin je vous l'accorde. Si vous avez des améliorations, je prends :)

if([string]::IsNullOrEmpty($lignetrait2[3]))
{
$obj = New-Object Psobject

$obj | Add-Member -Name \"Application\" -membertype Noteproperty -value $lignetrait2[0]

$obj | Add-Member -Name \"Protocole\" -membertype Noteproperty -value $lignetrait2[1]

$obj | add-member -name \"Local IP\" -membertype Noteproperty -value $lignetrait2[2]

$obj | add-member -name \"Dist IP\" -membertype Noteproperty -value $lignetrait2[3+1]

$obj | add-member -name \"Status\" -membertype Noteproperty -value $lignetrait2[4+1]

$obj | add-member -name \"Port\" -membertype Noteproperty -value $lignetrait2[5+1]

# $obj | add-member -name \"NoNAME\" -membertype Noteproperty -value $lignetrait2[6+1]

$tableau += $obj
}
else
{
$obj = New-Object Psobject

$obj | Add-Member -Name \"Application\" -membertype Noteproperty -value $lignetrait2[0]

$obj | Add-Member -Name \"Protocol\" -membertype Noteproperty -value $lignetrait2[1]

$obj | add-member -name \"Local IP\" -membertype Noteproperty -value $lignetrait2[2]

$obj | add-member -name \"Dist IP\" -membertype Noteproperty -value $lignetrait2[3]

$obj | add-member -name \"Status\" -membertype Noteproperty -value $lignetrait2[4]

$obj | add-member -name \"Port\" -membertype Noteproperty -value $lignetrait2[5]

# $obj | add-member -name \"NoNAME\" -membertype Noteproperty -value $lignetrait2[6]


$tableau += $obj
}

}

}

}


#Affichage tableau composé des objets

$tableau | ft -AutoSize




Pour ceux qui auront eu la courage de lire jusqu'au bout, je vous en remercie. Et si vous pouviez m'apporter une petite aide je suis preneur.
Merci à vous par avance

SayZ

Message édité par: Sayz, à: 15/05/17 23:04

Message édité par: Sayz, à: 15/05/17 23:05

Message édité par: Sayz, à: 15/05/17 23:06<br><br>Message édité par: Sayz, à: 15/05/17 23:08

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 6 mois #23640 par Marc
Ce que tu veux faire n'est pas simple.
Heureusement un autre s'est penché sur le sujet.

https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71

Tu n'est pas obligé de regarder ce qu'il à fait.
Mais je te conseil d'y jetter un œil que tu constate l'ampleur de la tâche pour faire un truc propre :silly:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 6 mois #23641 par Laurent Dardenne
Pour le point 2 voici une piste .
Mais dans ton cas les lignes en sortie peuvent être localisées et le recensement de toutes les sorties possible s’avère délicat.

Regarde aussi du côté des projet opensource GitBug/codeplex.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.189 secondes
Propulsé par Kunena