ttyname teilt Ihnen den Namen des Terminals mit, das mit einem bestimmten Dateideskriptor verbunden ist; zum Beispiel ttyname(0)
wird Ihnen das Terminal von stdin mitteilen.
Dies schlägt natürlich fehl, wenn die Eingabe oder Ausgabe umgeleitet wird.
Abgesehen davon können Sie verschiedene Umgebungsvariablen (SSH_CONNECTION
, SSH_CLIENT
, REMOTEHOST
, DISPLAY
, SESSIONNAME
). Wireshark verfügt über eine Logik, um zu erkennen, ob es remote ausgeführt wird, damit es den von ihm generierten Netzwerkverkehr nicht erfasst. Sie könnten an der Logik interessiert sein, die die get_conn_cfilter-Funktion verwendet, um dies zu implementieren.
Wenn Sie den Rückgabewert von ttyname(3) mit Ihrer Standardeingabe vergleichen, sollten Sie den Namen des Terminals erhalten, das die Eingabe Ihres Prozesses speist.
Es wird /dev/console sein, wenn das Programm auf der Konsole ausgeführt wird (und seine Eingabe nicht umgeleitet wird). Sie können auch stdout überprüfen, um zu sehen, ob es mit /dev/console verbunden ist - sehen Sie, was besser zu Ihrem Nutzungsszenario passt.
Ich würde Umgebungsvariablen als vernünftiges Zeichen dafür betrachten, was vor sich geht. Ich bin mir nicht sicher, welche C-API Sie dafür brauchen würden, aber ich bin mir sicher, dass es eine gibt.
Zum Beispiel sowohl die SSH_CLIENT
oder SSH_CONNECTION
Umgebungsvariablen werden auf meinem Computer unabhängig vom verwendeten SSH-Client festgelegt.
Es kann sich lohnen zu überprüfen, wie universell diese auf dem SSH-Server basieren, der auf dem Computer ausgeführt wird.
Je nachdem, wie sehr Sie sich Sorgen machen, dass es gespooft wird, wäre eine einfache Überprüfung das Vorhandensein/Fehlen der Umgebungsvariablen SSH_CLIENT und SSH_CONNECTION, in diesem Fall würden Sie den getenv
wollen Funktion.