2010-09-12 2 views
2

Этот вопрос относится как к серверу ServerFault.com, так и к нему, но это похоже на программирование, отличное от сервера. Я установил свой домашний компьютер для запуска сервера Apache. Он отвечает на порт 5900, который был перенаправлен портами с моего беспроводного маршрутизатора. Затем я настроил динамический DNS-сервер, чтобы постоянно обновлять IP-адрес моей домашней сети. Я знаю, что эта часть работает, потому что я использовал другой компьютер в другой беспроводной сети и смог получить доступ к странице индекса моего сервера с помощью MYURL.com:5900.Доступ к моей домашней сети с использованием CURL

Моя цель - теперь отправить сообщение на мой домашний сервер. Я написал сценарий на моем домашнем сервере, где, если я отправлю сообщение POST, он сохранит это сообщение в файле. Другими словами, ряд событий должен идти, как это:

  1. Я вхожу на моем веб-страницы, написать текст в Input, и нажмите кнопку отправки
  2. сообщение будет послана на сервер моего веб-сайта ,
  3. Мой сервер запускает скрипт, который использует CURL для отправки сообщения в качестве POST на мой домашний сервер DDNS
  4. Сервер дома берет сообщение и запускает скрипт, который записывает его в файл.

Я знаю, как сделать 1,2 и 4. Я пытался заставить 3 работать и не могу. Я даже не могу заставить CURL читать индекс home.html моего домашнего сервера. Вот код, который я использовал с CURL (Использование PHP):

$string = 'http://MYURL.com'; 

    echo "sending to " . $string . '<br/>'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $string); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_PORT, 5900); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    $response = curl_exec($ch); 

    if(curl_error($ch)) 
    { 
     echo curl_error($ch); 
    } 
    echo $response; 

    curl_close($ch); 

Я испытал это с google.com, и порт по умолчанию, и он работал отлично. Он повторил html, предоставленный мне google. Однако, когда я запускаю его на DNS-сервере моего домашнего сервера, он всегда истекает. Когда я не добавляю тайм-аут, он сказал, что не может подключиться. Это использует тот же самый URL-адрес, который при вводе в браузер правильно отправляет мне индекс home.html моего домашнего сервера.

Кто-нибудь знает, что происходит не так? Кроме того, если бы был лучший способ сделать это, что это?

Я знаю, что это был долгий вопрос, поэтому большое вам спасибо.

Этан

ответ

5

От какого места вы это проверяете? Большинство сетей в наши дни сильно брандмаунированы и запрещают исходящие подключения к странным портам. Ваш порт 5900, безусловно, считается странным.

Причина, по которой ваш тест с использованием беспроводной сети (я предполагаю 3G?) Работает потому, что этот ПК/ноутбук подключается напрямую к Интернету и поэтому не блокируется брандмауэром.

Самый простой способ проверить теорию брандмауэра - настроить тестовую страницу на своем сервере на порту 80 и попытаться получить доступ к ней с помощью CURL. Если это работает, то вы знаете, проблема в том, кто по цепочке маршрутизаторов и прокси блокирует ваш порт 5900.


Немного о том, почему порт 80 не считается «странным»:

Порт 80 - port conventionally used for HTTP (web server) as assigned by IANA. Как правило, он обычно не блокируется, учитывая, что основная причина, по которой люди подключаются к Интернету, - это доступ к World Wide Web (который работает по протоколу HTTP и, следовательно, для открытия порта 80). Блокирующий порт 80 делает интернет бесполезным (ну, не совсем, у вас все еще есть электронная почта). Если системный администратор когда-либо блокирует порт 80, он может также отключить Интернет.Поэтому по умолчанию порт 80 не заблокирован.

Теперь, что это значит для вас, home-server-admin. Конечно, ваш IP-адрес имеет только один порт 80. Это означает, что действительно может быть только одно правило переадресации портов, подключенное к порту 80. Это означает, что в вашей локальной сети может быть только один компьютер, обслуживающий веб-страницы во внешний мир * , Если вы, брат или сестра, хотите запустить еще один веб-сервер, тогда ему придется использовать другой порт.

Именно поэтому веб-серверы предназначены для обслуживания нескольких веб-страниц (они обнаруживают URL-адрес, поэтому один порт 80 может обслуживать разные сайты). Это разрешить одному IP-адресу серверу на разных веб-сайтах с одной машины. Google: http virtual host для получения дополнительной информации.

* note: Не совсем верно, вы можете использовать прокси-сервер для балансировки нагрузки или перенаправление маршрутизации для перенаправления HTTP-запроса на другие компьютеры в сети. Но принцип все еще верен. Только порт 80 одной машины может быть напрямую открыт в Интернете. Остальные просто прокси.

+1

5900 не странно - это стандартный порт VNC – Maerlyn

+0

К системному администратору VNC странно (не нормально). Не странные порты - обычные подозреваемые: 80, 443, 53, 21 и т. Д. Системные администраторы Windows даже считают порт 22 странным. – slebetman

+0

Я никогда раньше не делал этого. Я только случайно выбрал 5900, потому что он не использовался. Это мой беспроводной маршрутизатор дома. Из того, что я понимаю, 80 - это порт TCP/IP по умолчанию. Не переносит ли перенос 80 на мой ноутбук, никто не сможет использовать порт 80 и интернет, на этом беспроводном маршрутизаторе? – Ethan

0

Когда-то маршрутизатор предотвращает доступ к вашему внешнему IP-адресу из внутренней сети.

Попробуйте подключить свой собственный внешний IP-адрес и получить доступ к порту 5900 из вашей внутренней сети, вы увидите, так ли это.

+0

Не мой тест, где я использовал другой компьютер, IP-адрес и беспроводной маршрутизатор, покрывает этот тест? Мне удалось получить доступ к моей домашней сети с помощью браузера. Разве браузер не отправляет по существу тот же запрос GET? – Ethan

+0

Вы были, но из другой сети попробуйте получить доступ к внешнему IP-адресу из своей внутренней сети и посмотреть, работает ли он. –