Frage Ist es möglich, einen Socket mit einem Shell-Befehl zu schließen?


Ist es möglich, einen Socket zu schließen, indem man eine Art Shell-Kommando / Programm benutzt? Ich habe viele Beispiele für die Manipulation von Sockets mit C und anderen Sprachen gesehen, konnte aber kein Programm dafür finden.

Dies ist hauptsächlich aus Neugier und nicht aus irgendeinem Grund notwendig. Obwohl es nützlich sein könnte, meine Anwendung zu testen oder einen TCP-Socket zu schließen, den ich nicht geöffnet haben möchte.

Ich bin hauptsächlich an Linux / Unix interessiert, aber eine Möglichkeit, dies unter Windows zu tun, wäre auch schön.


6
2017-09-09 21:22


Ursprung




Antworten:


Sie können einen Socket in sh genauso wie jede andere Datei schließen: exec 42>&- wo 42 ist der Dateideskriptor. Was Sie nicht tun können (außer in einigen Shells, die eine Erweiterung dafür bieten), ist ein Socket geöffnet. Aber natürlich schließt das den Socket in der Shell, nicht in einem anderen Prozess.

Das Schließen eines Sockets in einem laufenden Prozess würde sein Verhalten auf eine Weise stören, die der Autor des Programms nicht erwarten sollte - es ist, als würde man hineingehen und ein Stück Speicher verändern. Dies kann jedoch erreicht werden, indem Sie sich mit einem Debugger mit dem Prozess verbinden und ihn dazu veranlassen, einen Socket-Closing-API-Aufruf auszuführen (das wäre der close oder shutdown Systemaufruf unter Unix).


6
2017-09-09 21:55



Nur eine Anmerkung: Es scheint, dass bash TCP-Ports öffnen kann. catonmat.net/blog/tcp-port-scanner-in-bash  Außerdem unterstützt zsh / dev / tcp nicht - Jason Axelson
Könnten Sie bitte den Teil "Disruption" näher erläutern? - Alexander Gonchiy