утилита unix netcat в linux, проверяющая, было ли установлено соединение

Я использую утилиту netcat в Linux для получения выходных данных программы на компьютере с Windows. Моя проблема в том, что программа на машине Windows не всегда дает результат.

Как я могу проверить, было ли установлено соединение с netcat?

То, что я делаю до сих пор, это «nc -l -v 9103 > output», затем я проверяю размер вывода, проблема заключается в том, что netcat записывает в файл только после того, как был достигнут определенный размер буфера или обнаружена новая строка char, поэтому в некоторых случаях даже несмотря на то, что соединение было установлено, размер файла определяется как нулевой.

Как я могу проверить, установил ли кто-то соединение с netcat.

я пытался использовать

nc -l -v -e someprog.exe 9103 > output

но мой netcat, похоже, не поддерживает это

ниже варианты у меня есть

    $ nc -h
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
          [-x proxy_address[:port]] [hostname] [port[s]]
        Command Summary:
                -4              Use IPv4
                -6              Use IPv6
                -D              Enable the debug socket option
                -d              Detach from stdin
                -h              This help text
                -i secs         Delay interval for lines sent, ports scanned
                -k              Keep inbound sockets open for multiple connects
                -l              Listen mode, for inbound connects
                -n              Suppress name/port resolutions
                -p port         Specify local port for remote connects
                -r              Randomize remote ports
                -s addr         Local source address
                -T ToS          Set IP Type of Service
                -C              Send CRLF as line-ending
                -t              Answer TELNET negotiation
                -U              Use UNIX domain socket
                -u              UDP mode
                -v              Verbose
                -w secs         Timeout for connects and final net reads
                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"
                -x addr[:port]  Specify proxy address and port
                -z              Zero-I/O mode [used for scanning]
        Port numbers can be individual or ranges: lo-hi [inclusive]

person user434885    schedule 10.09.2012    source источник


Ответы (2)


подробный режим будет записывать подключение к stderr, и вы можете перенаправить stderr в файл, в подробном журнале есть что-то вроде подключения к [xxx] from [xxxx]

пытаться

nc -l -v -p 9103 -k 1> output 2>connect.log

и отслеживать connect.log для подключения

если вы не используете -k , netcat завершает работу после первого подключения.

person Ted Shaw    schedule 10.09.2012

Если вы можете обновить свою копию netcat: в современных версиях (например, 1.10) есть возможность запускать программу (или команду оболочки) при подключении. В противном случае вы можете заставить netcat думать, что он работает в терминале (чтобы отключить буферизацию stdout), используя, например, script (он просто сохраняет все на stdin/stdout/stderr в заданном файле). Или используйте функции ведения журнала screen и tmux.

person fork0    schedule 10.09.2012
comment
можно уточнить как мне это сделать? - person user434885; 10.09.2012
comment
Что из этого? Обновить netcat, использовать script, screen или tmux? - person fork0; 10.09.2012