Question [Résolu]Question sur une suppression de caractére

Plus d'informations
il y a 7 ans 2 mois #28337 par dimshell
Bonjour,

je suis bloqué pour supprimer une ligne d'un fichier.




fichier de sortie de base:

IP;55043;IP;389
IP;389;IP;55043
IP;55043;IP;389
;bad-len;;

[code:1]# Permets de lister les cartes réseau connectées

$eth=@(C:\Users\svc_portscan\Desktop\Windump.exe -ArgumentList -D)
#$eth = Invoke-Expression \"$env:USERPROFILE\Desktop\Windump.exe -ArgumentList -D\"

# Parcours les cartes et si il y a intel dedans stock le premier caractére donc le numéro de la carte pour notre commande Windump de la varaible $argum
foreach($item in $eth){

if ($item -match 'intel'){

$newitem =$item.Substring(0,1)
}
else{
$newitem=1
}
}
# Variable contenant des variables d'environnementspour le chemin d'accès au différents fichiers
$path=\"$($env:USERPROFILE)\Documents\"
$pathexec=\"$($env:USERPROFILE)\Desktop\"

# Commande WinDump
$argum=\"-i $newitem -q -n -t -c 500 tcp\"

# Contenant le résultat du WinDump
$fichier = \"$path\Windump.txt\"

# Contenant le résultat après modifiction de la variable $fichier
$newcontenu = \"$path\WindumpTri.txt\"

# Colonne du CSV
$Header = \"c1\",\"ipsrc\", \"portsrc\", \"ipdest\", \"portdest\", \"c6\"

# Lancement d'une application Windump.exe avec l'argument une variable contenant la commande WinDump et écrit dans le fichier fournit
$process=Start-Process $pathexec\Windump.exe -PassThru -ArgumentList $argum -RedirectStandardOutput $fichier

# Attends la fin d'execution du processus pour continuer le script
$process.WaitForExit()

# Lecture du fichier comme ci celui-ci été un CSV
$dump = Import-Csv $fichier -Header $Header -Delimiter \" \"


# Remplace après l'ip de destination le : par du vide (parcours l'ensemble des objets)
$dump | foreach {
$_.ipdest = $_.ipdest -replace \":\",\" \"
}

$dump | foreach {
$_.ipsrc = $_.ipsrc -replace \"bad-len\",\"\"
}

# Remplace via une regex les differentes colonnes (parcours l'ensemble des objets)
$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\",\"\"
$ipsrc = ($_.ipsrc -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]
$portdest = $_.ipdest -replace [regex]\"([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\", \"\"
$ipdest = ($_.ipdest -split [regex]\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"«»)[1]

$_ | select @{n=\"ipsrc\";e={$ipsrc}},@{n=\"portsrc\";e={$portsrc}},@{n=\"ipdest\";e={$ipdest}},@{n=\"portdest\";e={$portdest}}
}


# écrit dans le résultat dans le fichier $newcontenu et ajoute entre l'ip dest/ source / port un ; (parcours l'ensemble des objets)
$result | foreach {
\"$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\"

} | Set-Content $newcontenu




# export en CSV sans doublons
$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\WindumpNetcare.csv \";\" -NoTypeInformation
[/code:1]


fichier de sortie après l'exe du script

IP;55043;IP;389
IP;389;IP;55043
IP;55043;IP;389
;;;

fichier voulu :

IP;55043;IP;389
IP;389;IP;55043
IP;55043;IP;389


Merci pour vos réponses.

j'ai essayé sous plusieurs façon mais rien de concluant.

Message édité par: dimshell, à: 26/02/19 08:26

Message édité par: Arnaud, à: 26/02/19 14:08<br><br>Message édité par: dimshell, à: 26/02/19 14:31

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

Plus d'informations
il y a 7 ans 2 mois #28338 par Sinjk
Salut, je t'avoue que je n'ai pas lu ton script mais pour récupérer seulement les valeurs voulues, si celle-ci sont dans un fichier texte par exemple, j'utilise:

[code:1]
get-content \&quot;cheminverstonfichier\ip.txt\&quot; |select-string -pattern \&quot;IP\&quot;
[/code:1]

Le pattern ne selectionne que les lignes qui commence par \&quot;IP\&quot; (si je comprends bien, les lignes que tu veux récupérer contiennent \&quot;IP\&quot;)

En espérant que cette petite piste puisse t'aider.

Bon courage<br><br>Message édité par: Sinjk, à: 26/02/19 09:08

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

Plus d'informations
il y a 7 ans 2 mois #28341 par dimshell
Merci pour ta réponse,

IP = une adresse IP

mais la mauvaise ligne aussi commence par IP
fichier contenant le résultat du Windump

IP x.x.x.x.58209 &gt; x.x.x.x.389: tcp 0
IP bad-len 0
IP x.x.x.x.389 &gt; x.x.x.x.58209: tcp 0<br><br>Message édité par: dimshell, à: 26/02/19 10:20

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

Plus d'informations
il y a 7 ans 2 mois #28345 par Philippe
salut dimshell

si je comprend bien tu a une ligne vide (avec que les points virgules)

les point virgule sont généré par cette ligne :
[code:1] \&quot;$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\&quot;[/code:1]
il faut donc filtrer avant les lignes vides
sur la ligne precedente tu peut essayer ceci
[code:1]$result | where {$_ -ne $null} | foreach {[/code:1]
ou ceci
[code:1]$result | where {$_.ipsrc -ne \&quot;\&quot;} | foreach {[/code:1]<br><br>Message édité par: 6ratgus, à: 26/02/19 11:37

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

Plus d'informations
il y a 7 ans 2 mois #28350 par dimshell
Merci pour ta réponse.


Oui je remplace bad-len par du vide et après j'ai les 3 points-virgules.



cela fonctionne :lol:
Je me prends trop la tête à faire des traitements inutile.




[code:1]# Permets de lister les cartes réseau connectées

$eth=@(C:\Users\svc_portscan\Desktop\Windump.exe -ArgumentList -D)
#$eth = Invoke-Expression \&quot;$env:USERPROFILE\Desktop\Windump.exe -ArgumentList -D\&quot;

# Parcours les cartes et si il y a intel dedans stock le premier caractére donc le numéro de la carte pour notre commande Windump de la varaible $argum
foreach($item in $eth){

if ($item -match 'intel'){

$newitem =$item.Substring(0,1)
}
else{
$newitem=1
}
}
# Variable contenant des variables d'environnementspour le chemin d'accès au différents fichiers
$path=\&quot;$($env:USERPROFILE)\Documents\&quot;
$pathexec=\&quot;$($env:USERPROFILE)\Desktop\&quot;

# Commande WinDump
$argum=\&quot;-i $newitem -q -n -t -c 500 tcp\&quot;

# Contenant le résultat du WinDump
$fichier = \&quot;$path\Windump.txt\&quot;

# Contenant le résultat après modifiction de la variable $fichier
$newcontenu = \&quot;$path\WindumpTri.txt\&quot;

# Colonne du CSV
$Header = \&quot;c1\&quot;,\&quot;ipsrc\&quot;, \&quot;portsrc\&quot;, \&quot;ipdest\&quot;, \&quot;portdest\&quot;, \&quot;c6\&quot;

# Lancement d'une application Windump.exe avec l'argument une variable contenant la commande WinDump et écrit dans le fichier fournit
$process=Start-Process $pathexec\Windump.exe -PassThru -ArgumentList $argum -RedirectStandardOutput $fichier

# Attends la fin d'execution du processus pour continuer le script
$process.WaitForExit()

# Lecture du fichier comme ci celui-ci été un CSV
$dump = Import-Csv $fichier -Header $Header -Delimiter \&quot; \&quot;


# Remplace après l'ip de destination le : par du vide (parcours l'ensemble des objets)
$dump | foreach {
$_.ipdest = $_.ipdest -replace \&quot;:\&quot;,\&quot; \&quot;
}

$dump | foreach {
$_.ipsrc = $_.ipsrc -replace \&quot;bad-len\&quot;,\&quot;\&quot;
}


# Remplace via une regex les differentes colonnes (parcours l'ensemble des objets)
$result = $dump | foreach {
$portsrc = $_.ipsrc -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;,\&quot;\&quot;
$ipsrc = ($_.ipsrc -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]
$portdest = $_.ipdest -replace [regex]\&quot;([0-9]{1,3}\.){3}[0-9]{1,3}(\.)\&quot;, \&quot;\&quot;
$ipdest = ($_.ipdest -split [regex]\&quot;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\&quot;«»)[1]

$_ | select @{n=\&quot;ipsrc\&quot;;e={$ipsrc}},@{n=\&quot;portsrc\&quot;;e={$portsrc}},@{n=\&quot;ipdest\&quot;;e={$ipdest}},@{n=\&quot;portdest\&quot;;e={$portdest}}
}


# écrit dans le résultat dans le fichier $newcontenu et ajoute entre l'ip dest/ source / port un ; (parcours l'ensemble des objets)



$result | where {$_.ipsrc -ne $null}| foreach {
\&quot;$($_.ipsrc);$($_.portsrc);$($_.ipdest);$($_.portdest)\&quot;

} | Set-Content $newcontenu




# export en CSV sans doublons
$result| select ipsrc, portsrc, ipdest, portdest -Unique | export-csv $path\WindumpNetcare.csv \&quot;;\&quot; -NoTypeInformation

[/code:1]

Message édité par: dimshell, à: 26/02/19 13:57<br><br>Message édité par: dimshell, à: 26/02/19 14:02

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

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