Zsh анализирует модификаторы перед командами так же, как псевдонимы и ключевые слова :они должны быть в начале команды, без кавычек. Это в значительной степени необходимо для модификаторов, влияющих на синтаксический анализ команды (noglob
, nocorrect
). Модификаторы предварительной команды builtin
, command
, exec
используют внутри ту же логику, даже если их можно интерпретировать иначе.
Насколько я могу судить, для этой логики нет серьезной причины, просто это было сделано таким образом пару десятилетий назад, и никто не заботился об этом пограничном случае достаточно, чтобы исправить это.
Учитывая, что что-то вроде \command -v ls
не делает ничего толкового, это определенно ошибка.
I need to test that the client can connect to the server through IPv6.
Вам нужно смотреть на оба конца. В теме -этого сайта будут только конечные точки Linux. (Но вы видите, как далеко вы можете зайти. И если вы продвинетесь достаточно далеко, вы можете поискать то, что работает в Windows :-).
Есть только четыре возможности.
Запустите эту команду:ip -6 addr
1. Нет IPv6-адреса :у вас нет строк, начинающихся с inet6
. Тест не пройден.
2. Ссылка IPv6 -только локальные адреса :строки inet6
под сетевым интерфейсом, обращенным к вашей целевой сети, начинаются с fe80::
. Технически можно использовать локальные адреса ссылки -, однако некоторые приложения их не поддерживают. Если возможно, разрешите эту ситуацию, т. е. обработайте ее как сбой теста.
Какой сетевой интерфейс обращен к вашей целевой сети?
lo
. Игнорируй это. e
(Ethernet ),wl
(беспроводной ),ww
(глобальной -беспроводной сети )или, что менее вероятно,ppp
(всякой ерунды :-P ). В вашем случае вы их проигнорируете. v
. VirtualBox использует vboxnet
, а libvirt (virt -менеджер )использует virbr
. В вашем случае интерфейс, который вы хотите, почти наверняка является одним из них. 3. Потенциально маршрутизируемый ipv6-адрес :, т. е. как минимум один адрес, который не начинается fe80::
. Тест еще не провален -:-). Перейдите к следующему шагу.
Определив маршрутизируемый адрес ipv6, вы можете протестировать подключение к нему из другой системы.
ping6
подходит -, если вы знаете, что ping не блокируется брандмауэром.
Лучше не блокировать ping в ваших брандмауэрах, если только брандмауэр не блокирует все входящие соединения. Иначе,на самом деле это не имеет смысла, и вы только усложняете себе жизнь.
Ваше приложение будет иметь инструкции где-то относительно того, какой номер порта (и какой тип порта )оно использует, чтобы пропустить его через брандмауэр.
Чтобы проверить подключение к порту TCP, я бы использовал sudo nmap -sT -p 1,$MYPORT $MYADDRESS
. Вы также можете использовать sudo nmap -sT -F $MYADDRESS
для сканирования общих портов. Последнее может быть полезно, если показывает, что можно установить какое-либо соединение через другой порт, например. возможно, вы забыли разрешить правильный порт через брандмауэр.
Для проверки портов UDP используйте -sU
вместо -sT
. Я бы не стал заморачиваться с nmap -sU -F
, потому что сканирование UDP может быть намного медленнее , чем сканирование TCP.
Чтобы увидеть, как выглядит успешный тест, отсканируйте адрес::1
(localhost ). Если у вас еще нет открытого порта на локальном хосте, откройте второе окно терминала и запустите ncat -l ::1 22
, чтобы запустить фальшивую службу SSH, которую обнаружит nmap
.
Если вам необходимо подключиться к локальному адресу ссылки -, вам потребуется указать идентификатор ссылки. Например. на ping
fe80 ::1 по ссылке vboxnet0
, запустите ping6 fe80::1%vboxnet0
. Это одна из причин, почему локальные адреса ссылки -менее полезны, :не все приложения знают, как указать идентификатор ссылки.