What are those "unknown" services?
Эти службы являются «неизвестными», поскольку они не перечислены в файле nmap
's services
, nmap использует это для сопоставления номеров портов со службами. В моей системе nmap
использует /usr/share/nmap/nmap-services
.
Я узнал, где находится файл, выполнив (Я использую devuan, систему на основе Debian -, такую как Ubuntu или Mint):
$ dpkg -L nmap
В системах на основе RedHat/Suse используйте rpm -ql nmap
.
How can I find them out? Is fuser supposed to find that out?
fuser
друг nmap
, для каждого просто запуститеfuser <port>/<protocol>
(первый столбец того, что nmap
распечатывает):
$ fuser 41441/tcp
41441/tcp 1234
Это даст вам pid процесса (из приведенного выше примера, 1234 ), который вы можете передать вps
$ ps 1234
PID TTY STAT TIME COMMAND
1234 ? Sl 169:39 /usr/lib/jvm/java-8-oracle/bin/java -Dnop -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager [...]
В моем примере это на самом деле Apache Tomcat...
Теперь я искал 41441 в /usr/share/nmap/nmap-services
и заменил "неизвестно" на "кот":
tomcat 41441/tcp
Теперь nmap обнаруживает моего кота:
$ nmap -p0-65535 192.168.1.198
Starting Nmap 7.60 ( https://nmap.org ) at 2019-03-19 23:32 EDT
Nmap scan report for olive.fios-router.home (192.168.1.198)
Host is up (0.00050s latency).
Not shown: 65526 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
2049/tcp open nfs
5900/tcp filtered vnc
41441/tcp open tomcat
Файл /etc/os-release
содержит оболочку списка -совместимых назначений переменных. Вам не нужно анализировать его из сценария оболочки, вы можете простоsource
(или.
)его и использовать соответствующие переменные.
$ cat ex.sh
#!/bin/sh
. /etc/os-release
echo "$NAME"
$./ex.sh
Ubuntu
В Debian эта конкретная строка
NAME="Debian GNU/Linux"
Обратите внимание на кавычки справа. Если они есть и в Ubuntu, то вы также получите буквальные кавычки в name
, поскольку кавычки не являются особыми для cut
. Другая проблема заключается в том, что строка может содержать пробелы, и в этом случае разбиение на слова столкнется с раскрытием переменной без кавычек в [ $name = "Ubuntu" ]
, и тест, скорее всего, выдаст ошибку.
Чтобы избежать этих проблем, заключайте расширение переменной в кавычки и добавляйте буквальные кавычки в строку сравнения:
if [ "$name" = '"Ubuntu"' ]; then...
Или удалите кавычки в начале и в конце строки:name=${name#\"}; name=${name%\"}
и по-прежнему заключайте в кавычки "$name"
.