Могу ли я сделать дырокол, используя обычный скрипт PHP на сервере Apache?

Есть концепция, может быть, взломать, что я беспокоюсь о себе долгое время. То, что я думал, это то, что по сути, TCP-сокет является переменной. Он содержит некоторую информацию о вашей цели, которая представлена ​​определенными байтами в памяти вашей программы. А также байты могут быть отправлены на другие компьютеры через Интернет.

Эта концепция должна позволять общему серверу устанавливать прямое соединение между двумя частными компьютерами (с брандмауэром или за маршрутизатором). Погуляв некоторое время, я обнаружил, что эта концепция действительно существует и называется Перфорация.

Это действительно отличается от прокси. Посмотрите — это типичное соединение прокси / реле:

Описание изображения

Данные проходят через публичный сервер. Зеленые кружки обозначают сокетные соединения между устройствами, синяя линия — поток данных.

Теперь, что сервер отправляет сокет A на устройство B и наоборот?

Описание изображения

Внезапно оба устройства имеют «адрес» друг друга и могут отправлять друг другу любую информацию:

Описание изображения

Мой вопрос: позволяет ли скрипт PHP получать информацию, необходимую для обмена информацией о сокетах? Как предотвратить прерывание сокета после 30-секундного ограничения времени PHP?

2

Решение

Этот вопрос меня немного смущает. Вы не упомянули какие-либо подробности о клиентах в схеме и о целях установления связи между ними. Если вы думаете об этом с точки зрения установления прямой связи между двумя HTTP-клиентами, то то, что вы предлагаете, невозможно, так как клиентское программное обеспечение должно быть специально разработано, чтобы облегчить это. Более того, HTTP-клиент не может выступать в роли сервера.

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

  • Состояние приложения — две конечные точки обычно содержат высокоуровневое состояние сетевого подключения, такое как используемый протокол уровня 7 и дополнительные сведения об этом протоколе.
  • Состояние ядра — состояние сети вашей ОС будет содержать структуры, которые содержат определенные низкоуровневые сведения о вашем соединении, такие как состояние TCP, MTU и многие другие. Опять же, это будет верно для обоих хостов.
  • Таблица состояний NAT — вот хитрый, когда дело доходит до дырокола. В дополнение к состоянию двух взаимодействующих хостов, маршрутизаторы NAT на обоих концах содержат таблицы состояний, в которых перечислены установленные соединения хостов, обслуживаемых каждым соответствующим маршрутизатором NAT. Когда пакет поступает в Интернет, эта таблица используется, чтобы выяснить, куда отправить пакет во внутренней сети.

Пробивание отверстий в основном сводится к обману маршрутизаторов NAT для установки правильных записей в их таблицах состояний. Точный способ сделать это зависит от используемого протокола уровня 4. Схемы в вашем вопросе показывают типичный поток пробивки UDP, который требует общедоступного сервера. В случае TCP, который может быть тем, что вас действительно интересует, сервер не обязательно должен начинаться с.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]