Почему мои программы сокетов не могут подключиться к Интернету? - PullRequest
1 голос
/ 11 января 2011

В этом семестре я начал свой первый курс по работе в сети.Моя проблема заключается в том, что всякий раз, когда я пытаюсь подключить свой сокет к хосту за пределами локальной сети, возвращается сообщение о недоступности сети.Будь то сокеты BSD или сокеты Java.Более того, мои nmap-зонды также возвращают ту же ошибку.Однажды я задал подобный вопрос о ping-зондах, и я ответил, что мой прокси-сервер в локальной сети отклоняет запросы ICMP.Но нет никаких запросов ICMP при установлении TCP-соединений, верно?Почему, с другой стороны, мой браузер может подключаться к любому хосту ... хотя он использует тот же прокси-сервер ... Кроме того (извините меня за это долгое сомнение), когда я даю имя хоста как www.google.comмои сокеты, "неизвестный хост" возвращается.Но мой браузер с радостью распознает тот же хост.

Заранее спасибо ...

import java.net.*;
import java.io.*;

class Whois {
public static void main(String args[]) throws Exception{
    int c;
    Socket s=new Socket(args[0],Integer.parseInt((args[1])));
    InputStream in=s.getInputStream();

    while( (c=in.read()) != -1) {
        System.out.print((char) c);
    }
    s.close();
}
}

Ответы [ 3 ]

1 голос
/ 11 января 2011

Исследуйте и поймите настройки вашей сети.Как вы подключены к интернету?Ваша рабочая станция, вероятно, имеет маршрут по умолчанию , указывающий на какую-либо машину, возможно, выполняющую преобразование сетевых адресов (NAT) и / или работающую брандмауэр и, возможно, прокси сервер.Узнайте, как вы делаете разрешение имен (DNS).Как только вы это выясните, вы можете найти то, что вам нужно сделать, чтобы соединиться снаружи.

С другой стороны, ошибки в коде, которого мы не видим в вопросе, также вероятны:)

1 голос
/ 12 января 2011

Вероятно, существует брандмауэр, который блокирует все подключения к внешним хостам, и внутренний DNS-сервер, который не ищет внешние имена хостов. Именно поэтому ваши сокетные программы не могут ни искать внешние имена хостов, ни подключаться к внешним сервисам.

То же ограничение распространяется на ваш браузер; просто ваш браузер настроен на использование прокси-сервера. Это означает, что браузер напрямую не ищет внешние имена хостов и не подключается к внешним хостам - он только ищет имя прокси-сервера и устанавливает TCP-соединения с прокси-сервером. Затем прокси-сервер выполняет поиск имени хоста и устанавливает TCP-соединения с внешним миром от имени вашего браузера.

1 голос
/ 11 января 2011

К сожалению, может быть много причин для такого поведения.

Мой лучший вариант - вы находитесь за брандмауэром, который блокирует все соединения, которые не идут на порт 80. В этом случае вы можете попробоватьсоединиться с вашей программой в той же сети, но с портом 80.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...