Netcat крайне полезная утилита, используемая для дебага и реверс-инжиниринга.
Обычно утилита вызывается через команду nc
К любому серверу можно подключиться используя следующий синтаксис:nc $DOMAIN $PORT
Например:
nc localhost 8000
После подключения вы можете отправить на сервер любое сообщение, просто напечатав его, и затем вы получите ответ от сервера.
Примерно так же как в диалоге на двоих, с учётом того что вы можете работать с протоколами уровня приложения ( таких как HTTP, FTP, SMTP и т.п. )
Используя NetCat вы можете эмулировать любой протокол уровня приложения, на которых строится интернет.
Например вы можете подключиться к Web-серверу и посылать на него HTTP-инструкции.
Вы можете попробовать это с моим web-сервером с помощью команды nc dev-ops.zone 80
Далее нам необходимо ввести команды, которые мы отправим серверу:
GET / HTTP/1.1
Host: dev-ops.zone
Последняя пустая строка нужна для того чтобы сервер понял окончание последовательности команд.
После ввода пустой строки сервер ответит нам 301й ошибкой, так как у меня включен редирект на https.
С помощью NetCat мы также можем и слушать порт:
Запустим сервер выполнив команду nc -l -p 2000
Сервер будет печатать каждое полученное сообщение.
Затем подключимся к серверу используя команду nc localhost 2000
И отправим сообщение.
Также мы можем сделать эхо-сервер.
Сначала запустим сервер:nc -l -p 2000 -c 'xargs -n1 echo "recieved:"'
-l
говорит nc слушать входящие подключения-p 2000
указывает что слушать надо на порту 2000-с
позволит нам вызвать shell-команду.
В нашем случае -c 'xargs -n1 echo "recieved:"'
вызывает при каждом получении сигнала /bin/sh -c 'xargs -n1 echo "recieved:"' {$RECIEVED_MESSAGE}
. Стоит использовать с большой осторожностью!
Сам же сервер при этом ничего не выводит.
Теперь можно подключиться к нашему серверу и отправить ему пару сообщений:
Таким образом, например, можно протестировать возможность подключения к порту на целевом сервере.
Также добавив флаг -u
мы можем перевести сервер и клиент в режим UDP ( по умолчанию используется TCP )
Ещё Netcat можно использовать для сканирования портов в заданном диапазоне:nc -v -z localhost 1-10000
Скомбинировав команду сgrep
возможно получить список только открытых портовnc -v -z localhost 1-100 2>&1 | grep open
Также мы может отправить файл первому подключившемуся клиенту:nc -l $PORT < $FILENAME
И подключиться клиентом: nc localhost 2000
После того как клиент отключится сервер тоже завершит работу.
Дабы этого не происходило мы можем обернуть сервер простеньким скриптом:
while true; do nc -l PORT < FILENAME; done
Если в качестве файла отдавать html-страничку то мы получим простейший web-сервер.
Также мы можем отправить файл на сервер:
nc DOMAIN PORT < FILENAME
На этом на сегодня всё, спасибо за внимание.