Question Port Knicking

Plus d'informations
il y a 8 ans 8 mois #23806 par Fred
Port Knicking a été créé par Fred
Bonjours a tous et merci d'avance de votre aide

Voilà, pour faire simple j'ai une application d'un poste secondaire (téléphone en l'occurence) qui communique via un port spécifique avec une application sur mon Poste principal (Windows 10).
Le problème, c'est que l'application sur mon poste principal ne peux pas être lancé h24, c'est pourquoi j'essaye de créer un script Powershell de port knocking qui se lance au boot et qui va attendre un paquet sur le port en question, et quand ce sera fait, va lancer l'application approprié et lui laisser la communication jusqu'a la prochaine fois.

J'ai déjà (avec de l'aide) commencé un script Powershell assez \"simple\"

[code:1]$Listener = [System.Net.Sockets.TcpListener]8080;
while($true)
{
$Listener.Start();
$client = $Listener.AcceptTcpClient();
Write-Host \"Connecté, lancement de l'appli\";
$client.Close();
$Listener.Stop();
Start-Process -FilePath \"C:\Program Files (x86)\...\xxx.exe\" -Wait
Start-Sleep -s 10;
[/code:1]Dès qu'une connexion est tenté, le script va lancer l'exe et attendre qu'il soit fermé pour recommencer l'écoute (après une courte pause)
Ce script marche très bien, le problème, c'est que si l'appli PC est lancé manuellement (ce qui peut arriver) et qu'une connexion est détecté, le script essayera de lancer un autre exe qui échouera, mais surtout le -wait ne sera pas pris en compte et dans ce cas, l'écoute active du port empêche toute communication entre les 2 appli. (je ne sais pas si je me fait bien comprendre)
J'ai donc essayé
[code:1]while($true)
{
while((Get-Process -Name xxx -ErrorAction SilentlyContinue) -ne $null)
{
Start-Sleep -s 10;
}
$Listener = [System.Net.Sockets.TcpListener]8080;
$Listener.Start();
$client = $Listener.AcceptTcpClient();
Write-Host \"Connecté, lancement de l'appli\";
$client.Close();
$Listener.Stop();
If ((Get-Process -Name xxx -ErrorAction SilentlyContinue) -eq $null)
{
Start-Process -FilePath \"C:\Program Files (x86)\...\xxx.exe\" -Wait
Start-Sleep -s 10;
} else {
Write-Host \"appli déjà lancé\"
}
}[/code:1]
Ici, dès qu'une connexion est tenté, il va d'abord vérifier si l'exe est déjà lancé. Si ce n'est pas le cas, il va le faire comme précédemment, mais si il est déjà lancé, il va reprendre depuis le début, sauf que cette fois au début il y a une boucle infini si l'exe est lancé.
Le script a l'air de se dérouler correctement, mais visiblement, même quand le script est bloqué dans la boucle infini sleep 10 (car l'appli est déjà lancé), l'écoute reste active car la communication échoue en boucle...
le paramètre \"-wait\" a l'air de marcher pour mettre en pause l'écoute (CF le 1er script), mais je ne sais pas trop comment l'implémenter dans le cas ou l'appli est déjà lancé (sachant que je ne veux pas quitter l'appli si elle est déjà lancé)

Voilà, j'espère que vous pourrez m'aider parceque je ne suis pas très doué en scripting.
Merci d'avance de votre aide

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

Plus d'informations
il y a 8 ans 8 mois #23811 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Port Knicking
Salut,
pas certains d'avoir compris le problème...

Dans le cas où le proces existe, l'objet process propose la méthode WaitForExit () et l'event Exited.

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 8 mois #23819 par Fred
Réponse de Fred sur le sujet Re:Port Knicking
Salut, pour simplifier le problème, le port knocking s'accapare des paquets et donc bloque la connexion, donc il faut que j'arrive a stopper temporairement cette écoute active.
Après plusieurs tests, j'ai pu voir que le $client.Close(); et $Listener.Stop(); ne l'arrête pas, mais le -Wait si, donc j'essaye d'adapter un -Wait sur un processus(du gestionnaire de tâche) déjà lancé.

J'ai essayé de me renseigner et de faire quelques tests sur le WaitforExit() mais je n'arrive pas a le faire marcher... Je suis désolé, je suis vraiment débutant en PowerShell, tu pourrais me faire une commande toute faite qui applique un WaitForExit sur un process s'il te plait ?

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

Plus d'informations
il y a 8 ans 8 mois #23821 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Port Knicking
Un exemple:
[code:1]
start-process notepad
$p=get-process notepad
$p.WaitForExit()
[/code:1]
Tant que le process Notepad est en cours d'exécution, l'appel à WaitForExit est bloquant.

Pour info le paramètre -Wait fait la même chose sur le nouveau process créé.

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 8 mois #23822 par Fred
Réponse de Fred sur le sujet Re:Port Knicking
Ah oui la détection de processus a l'air de marcher correctement, mais le WaitForExit() n'a pas l'air d'arrêter l'écoute comme le fait -Wait...

As-tu une idée pour libérer le socket lorsqu'un process est lancé manuellement ?
Ou peut-être qu'il faut reprendre le script depuis le début, je ne comprends pas toutes les lignes donc je ne sais pas si il y a une faille...

Pour faire simple, voici un cas concret qui se rapproche de ce que je veux faire :
=> Je ne veux pas garder Skype allumé h24 mais si quelqu'un essaye de m'appeler, je veux que mon PC allume skype tout seul.

Pour cela, le script écoutera le port de communication de skype, et dès qu'un packet sera entendu (quelqu'un m'appel), le script lancera l'exe de skype.

Le problème que j'ai eut (de ce que je comprends), c'est que la commande d'écoute du port s'accapare des paquets et empêche l'appel une fois skype démarré, même avec une boucle \"Start-Sleep\".
Le seul moyen que j'ai trouvé c'est avec un -Wait lors du démarrage de l'exe (je ne comprends pas pourquoi mais il libère le port), mais ça n'est pas possible si j'ai lancé skype manuellement (la commande WaitForExit ne libère pas le port visiblement)

Je me fais comprendre ?

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

Plus d'informations
il y a 8 ans 8 mois #23826 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Port Knicking
Fred02 écrit:

mais le WaitForExit() n'a pas l'air d'arrêter l'écoute comme le fait -Wait...

A voir ce que fait exactement ton soft avec les ports lorsqu'il est en cours d'exécution.
Tracer les ports ?
Fred02 écrit:

Je me fais comprendre ?

Je connais peu le développement des couches réseau ,je ne suis pas certains de pouvoir t'aider plus que ça.

Tutoriels PowerShell

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

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