Как оценить переменную со строкой в ​​оболочке POSIX?

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
0
04.07.2020, 03:05
2 ответа

Файл /etc/os-releaseсодержит оболочку списка -совместимых назначений переменных. Вам не нужно анализировать его из сценария оболочки, вы можете простоsource(или.)его и использовать соответствующие переменные.

$ cat ex.sh
#!/bin/sh
. /etc/os-release
echo "$NAME"

$./ex.sh
Ubuntu
12
18.03.2021, 23:22

В Debian эта конкретная строка

NAME="Debian GNU/Linux"

Обратите внимание на кавычки справа. Если они есть и в Ubuntu, то вы также получите буквальные кавычки в name, поскольку кавычки не являются особыми для cut. Другая проблема заключается в том, что строка может содержать пробелы, и в этом случае разбиение на слова столкнется с раскрытием переменной без кавычек в [ $name = "Ubuntu" ], и тест, скорее всего, выдаст ошибку.

Чтобы избежать этих проблем, заключайте расширение переменной в кавычки и добавляйте буквальные кавычки в строку сравнения:

if [ "$name" = '"Ubuntu"' ]; then...

Или удалите кавычки в начале и в конце строки:name=${name#\"}; name=${name%\"}и по-прежнему заключайте в кавычки "$name".

3
18.03.2021, 23:22

Теги

Похожие вопросы