
Eigentlich möchte ich so etwas machen wieifconfig.meFunktionalität, aber nur für mein internes Netzwerk. Ich sehe es so, dass etwas auf dem Server auf einen Port hört und die IP des verbundenen Remote-Computers sendet.
Scheint nc
ein großartiges Dienstprogramm für mein Problem zu sein (außerdem habe ich kein PHP/Python/was auch immer auf dem Server, nur Shell und Standard-Unix-Tools).
Ich kann die Remote-IP und den DNS-Namen sehen, wenn ich sie nc -vv
vom Remote-System aus starte und eine Verbindung dazu herstelle, aber ich finde keine Möglichkeit, sie an den Remote-Host zu senden.
Oder habe ich vielleicht einen zu seltsamen Weg gewählt und es gibt eine andere, einfachere Lösung?
Antwort1
Sie könnten so etwas verwenden:
while true; do nc -lvp 1337 -c "echo -n 'Your IP is: '; grep connect my.ip | cut -d'[' -f 3 | cut -d']' -f 1" 2> my.ip; done
nc
wird in einer Endlosschleife ausgeführt und lauscht auf dem Port 1337
mit einer ausführlichen Option, die Informationen über den Remote-Host in schreibt stderr
. stderr
wird in die Datei umgeleitet my.ip
. Die Option -c
für nc
ermöglicht die Ausführung von etwas zum „Handhaben“ der Verbindung. In diesem Fall werden wir als Nächstes nach der IP-Adresse aus my.ip
der Datei suchen.
pbm@lantea:~$ curl http://tauri:1337
Your IP is: 192.168.0.100
Antwort2
while true; do nc -l -v 3333 2> status | while read msg; do ip=$(cat status | grep -o -P '(?<=from).*(?=port)') && notify-send "$ip" "$msg" -i gtk-network; done ; done
Umleitenstderrin eine Datei namensStatus; dann liest es die IP des Remote-Connectors aus der Datei; zeigt schließlich die IP in der Notify-OSD-Nachricht an.
Notiz:
wenn sich jemand von einem anderen Computer aus mit demselben Port verbindetkeineschreibt dies im Allgemeinen in stderr: connection from 10.10.0.1 port 3333 [tcp/*] accepted
. Ich extrahiere die IP-Adresse einfach mitgrep.