У меня есть приложение C#, написанное мной, которое прослушивает порт 789. Оно работает на компьютере с Windows XP Professional. Работает
netstat -an | find "789"
TCP 0.0.0.0:789 0.0.0.0:0 LISTENING
Когда я запускаю приложение nmap -A -vv ip
на другой машине Linux (но в той же подсети), оно сообщает только о других открытых на хосте портах (например, mysql, vnc и т. д.), но не о порте, открытом моим приложением.
Однако, когда я бегу, nmap -p 789 ip
я получаю:
PORT STATE SERVICE
789/tcp open unknown
Почему есть разница между двумя сканированиями nmap? Можно ли что-то сделать, чтобы nmap обнаруживал открытый порт при выполнении полного сканирования?
решение1
По умолчанию nmap сканирует только "общие" порты (1000 наиболее распространенных портов на протокол, как я полагаю). Поскольку 789 не является общим портом, он не найден. Если вы это сделаете
nmap -A -vv -p- ip
он должен сканировать порты 1-65535.
Вот документация nmap, в которой указано, какие порты сканируются по умолчанию: http://nmap.org/book/man-port-specification.html
решение2
Единственный способ сделать это — изменить файл служб nmap, что не рекомендуется. Эта -A
опция запускает расширенные опции, включая обнаружение служб, обнаружение ОС, трассировку и т. д. — она не сканирует весь диапазон. Если вы хотите сканировать все порты 65k, используйте опцию -p-
. В остальном вам просто нужно указать порт с помощью -p 789
. Лучшим вариантом, вероятно, будет создание псевдонима, который делает nmap -p 789
, чтобы сэкономить время.
Если вам действительно нужно изменить файл служб (по умолчанию /usr/local/share/nmap/nmap-services), найдите строку, которая гласит, unknown 789/tcp 0.000075
и замените ее на имя вашей программы, и добавьте номер в конце в 0.9
, так что это будет верхний порт, который включает nmap. Хотя псевдоним был бы намного лучше.
решение3
Я не уверен. Он определяет его как "открытый", что вам и нужно, верно? Так что этоявляетсяпрослушивание. Почему его не находят с -A, я не уверен.
Редактировать - это из старой документации, которая может не относиться к вашей версии. Запустите man nmap
и сообщите нам, какая у вас версия.
Из документов я вижу:
«По умолчанию сканируются все порты от 1 до 1024, а также все порты, перечисленные в файле служб, который поставляется с nmap».
Итак, 789 следует сканировать, даже если его нет в вашем файле служб (поскольку он помечен как «неизвестный», я уверен, что это не так).
Так что я не знаю. Проверьте свой man-файл для вашей версии nmap, может быть, его поведение относительно того, какие порты сканировать с помощью -A, отличается от документа, который я нашел?
Это маловероятно, но может быть стоит исследовать - разница может быть в вашем идентификаторе пользователя на машине Linux. Привилегированные и непривилегированные пользователи NMap имеют разные типы сканирования по умолчанию. Пользователи с правами root могут выполнять сканирование TCP SYN, пользователи без прав root будут по умолчанию использовать TCP connect() .
решение4
Команда nmap -A
является агрессивной, так как она запускает несколько скриптов в фоновом режиме, и это главная причина, по которой она даст вам больше результатов. Она объединяет определение версии -sV
с определением операционной системы -O
(заглавная буква O, а не цифра ноль) и другими скриптами обнаружения. Nmap по умолчанию, и если не указан конкретный номер порта, будет сканировать первые 1000 наиболее распространенных портов (они указаны вnmap-сервисыфайл, который вы можете редактировать). Агрессивную команду можно скормить портам, которые вы хотите сканировать, чтобы вы не получили результаты для других портов, кроме того, который вы хотите сканировать, TCP 789
nmap -p 789 -A TARGET_IP_ADDRESS_OR_IP_RANGE
тогда как если вы хотите только проверить, открыт/закрыт/фильтруется ли порт, в вашем случае 789
nmap -p 789 TARGET_IP_ADDRESS_OR_IP_RANGE
Так как -A
он выполняет несколько скриптов и производит много шума (с точки зрения сетевого трафика), его легко обнаруживают системы обнаружения вторжений (IDS), и, скорее всего, он будет заблокирован брандмауэрами или системами предотвращения вторжений (IPS), и это может быть одной из причин, по которой он не отображает правильный статус порта.