Lokalisierung – agnostische Ausgabe für Netcat

Lokalisierung – agnostische Ausgabe für Netcat

Ich würde gerne Netcat verwenden, um zu testen, ob einige Ports lauschen oder nicht, aber da der Befehl auf Maschinen ausgeführt wird, deren Sprachen nicht Englisch sind, ist es keine gute Idee, grepdie Ausgabe auf dem Wort zu basieren LISTENING(auf einem deutschen PC habe ich beispielsweise das Wort gesehen ABHOREN).

Ich habe versucht, mir die Manpages für Netcat anzusehen, kann dafür aber keine Lösung finden. Daher habe ich mich gefragt, ob es jemals jemandem gelungen ist, den Status des Ports in ein numerisches Format statt in eine Zeichenfolge zu übersetzen.

Dank im Voraus :)

Antwort1

Wenn Sie LISTENING sagen, gehe ich davon aus, dass Sie das tatsächlich wollen netstat(nicht netcat). Die meisten modernen Systeme verstehen netstat -lntwhich listet nur LISTENING-TCP-Sockets auf, sonst nichts. Vorsicht bei minimalen RHEL7-Installationen, da gibt es kein netstat – es wird zugunsten von ss(dieselben Flags, ss -lntaber leicht unterschiedliches Ausgabeformat) verworfen.

Im Allgemeinen besteht die Antwort darin, das Gebietsschema in der Umgebung richtig einzustellen, sodass alle Prozesse auf Englisch (oder besser C) mit Ihnen kommunizieren.

Antwort2

Sie können die Sprache für Netcat exportieren, bevor Sie es ausführen (oder sogar für Ihr gesamtes Skript):

LANG=C netcat ... 

Antwort3

netstatSie können den Kernel auch direkt fragen. Seine Informationen stammen von /proc/net/tcpund /proc/net/tcp6. Beide Dateien sind gleich formatiert und sindleicht(hüstel) schwerer zu lesen als die netstatAusgabe, aber sprachunabhängig

Dies ist eine gehackte und leicht maskierte Beispielausgabe:

$ cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
   0: 00000000:0385 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 5126 1 f4807080 100 0 0 10 -1
   1: 00000000:2328 00000000:0000 0A 00000000:00000000 00:00000000 00000000   113        0 5264 1 f62ff540 100 0 0 10 -1
   2: 00000000:008B 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 4535 1 f5bf1540 100 0 0 10 -1
   9: 0200000A:08AE xxxxxxxx:D512 01 00000030:00000000 01:00000018 00000000     0        0 759198 4 f63e95c0 24 4 3 10 19
  10: 0200000A:0D9B xxxxxxxx:7582 01 00000000:00000000 00:00000000 00000000   113        0 634192 1 f63e90c0 21 4 22 5 3

Die Schlüsselfelder, die Sie sehen, sind das Hex-Feld nach der :Unterseite local_address(Lokaler Port) und der stSpalte (Status).

Die Statusspalten werden in den Kernelquellen referenziert./include/net/tcp_states.h, aber hilfreicherweise hat jemand die Frage auf StackExchange gestellt:https://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc

Der Vollständigkeit halber werde ich es hier noch einmal wiederholen:

enum {
    TCP_ESTABLISHED = 1,
    TCP_SYN_SENT,
    TCP_SYN_RECV,
    TCP_FIN_WAIT1,
    TCP_FIN_WAIT2,
    TCP_TIME_WAIT,
    TCP_CLOSE,
    TCP_CLOSE_WAIT,
    TCP_LAST_ACK,
    TCP_LISTEN,
    TCP_CLOSING,    /* Now a valid state */

    TCP_MAX_STATES  /* Leave at the end! */
};

Wie in einem der Kommentare steht, handelt es sich hierbei um enumeinen Status, der fortlaufend ab 1 nummeriert ist. Meistens sucht man nach 0A(LISTENING) und 01(ESTABLISHED)

NB: Um herauszufinden, woher netstat diese Informationen bezog, habe ich ausgeführt strace -e open,write netstat -an.

Hier finden Sie einen ausführlicheren Einblick in die Feldüberschriften:http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

verwandte Informationen