Почему < или > необходимы для использования /dev/tcp

ejecute estos comandos en ON wan y conecte su banda ancha.

  nmcli -t nm wwan on
  nmcli -t con up id <Your Mobile Broadband Connection Name Here>

Para comprobar el estado de su conexión

  nmcli -p dev

Para RHEL7

  nmcli device wifi con "ssid" password "<password>"

si no prueba connmtui

yum install NetworkManager-tui

nmtui
13
19.06.2019, 03:59
2 ответа

Потому что это особенность оболочки (ksh, скопированная bash ), и только оболочка.

/dev/tcp/...не настоящие файлы,оболочка перехватывает попытки перенаправления на файл /dev/tcp/..., а затем выполняетsocket(...);connect(...)(устанавливает TCP-соединение )вместо open("/dev/tcp/..."...)(, открывающего этот файл )в этом случае.

Обратите внимание, что это должно быть написано так. cat < /dev/./tcp/...или ///dev/tcp/...не будут работать и попытаются открыть вместо них те файлы (, которые не существуют в большинстве систем, и вы получите сообщение об ошибке ).

Направление перенаправления также не имеет значения. Используете ли вы 3< /dev/tcp/...или 3> /dev/tcp/...или 3<> /dev/tcp/...или даже 3>> /dev/tcp/..., не будет иметь никакого значения, вы сможете как читать, так и записывать из/в этот файловый дескриптор для получения/отправки данных по этому TCP разъем.

Когда вы делаете cat /dev/tcp/..., это не работает, потому что catне реализует ту же самую специальную обработку, она делает open("/dev/tcp/...")подобное для каждого файла (, кроме -), только оболочки (ksh, только bash )и только для цели перенаправления.

Это cat -является еще одним примером пути к файлу, который обрабатывается особым образом. Вместо того, чтобы выполнять open("-"), он читает непосредственно из файлового дескриптора 0 (stdin ). catи многие текстовые утилиты делают это, оболочка не делает этого для своих перенаправлений. Чтобы прочитать содержимое файла -, вам нужно cat./-, или cat < -(, или cat - < -). Однако в системах, в которых нет /dev/stdin, bashбудет делать что-то подобное для перенаправления из этого (виртуального )файла. GNU awkделает то же самое для /dev/stdin, /dev/stdout, /dev/stderrдаже в системах, в которых есть такие файлы, что может вызвать некоторые сюрпризы в таких системах, как Linux, где эти файлы ведут себя иначе.

zshтакже имеет поддержку сокетов TCP (и потока домена Unix ), но это делается с помощью встроенных функцийztcpzsocket), поэтому он менее ограничен, чем подход ksh/bash. В частности, он также может действовать как сервер, чего не может сделать ksh/bash. Тем не менее, это все еще гораздо более ограничено, чем то, что вы можете сделать на реальном языке программирования.

31
27.01.2020, 19:52

Вы, кажется, путаете идеи или чтение файла и выполнение команды. Разница между данными и инструкциями.

Главная страница Google не является исполняемой программой. А если бы и было, то запускать его было бы небезопасно.

Символы перенаправления (, включая <и >), используются для направления данных в команду.

Можем сделать cat < /dev/tcp/towel.blinkenlights.nl/23Однако это не сработает для /dev/tcp/www.google.com/80, так как этот порт не ответит, пока мы не отправимGET / HTTP/1.0\r\n\r\n

Так что попробуй

{
  printf >&3 'GET / HTTP/1.0\r\n\r\n'
  cat <&3
} 3<>/dev/tcp/www.google.com/80
7
27.01.2020, 19:52

Теги

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