Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокси сервер на netty: выбор сетевого интерфейса 
:(
    Опции темы
vadkasevas
Дата 9.7.2013, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



    Разбираюсь с исходниками http://www.littleshoot.com/littleproxy/ . Это http прокси сервер, написанный на java с использованием netty.
К сожалению, он не позволяет выбирать сетевой интерфейс по которому будут идти запросы на сервер. Т.е. мне нужно следующее: в зависимости от запрашиваемого URL запросы идут через разные интерфейсы. С netty я не знаком.
    За получение соединения отвечает метод класса HttpRequestHandler:
Код

private ChannelFuture newChannelFuture(final HttpRequest httpRequest, final Channel browserToProxyChannel, final String hostAndPort) 
        throws UnknownHostException {
        final String host;
        final int port;
        if (hostAndPort.contains(":")) {
            host = StringUtils.substringBefore(hostAndPort, ":");
            final String portString = 
                StringUtils.substringAfter(hostAndPort, ":");
            port = Integer.parseInt(portString);
        }
        else {
            host = hostAndPort;
            port = 80;
        }
        
        // Configure the client.
        final ClientBootstrap cb = 
            new ClientBootstrap(this.clientChannelFactory);
        final ChannelPipelineFactory cpf;
        if (httpRequest.getMethod() == HttpMethod.CONNECT && !LittleProxyConfig.isUseSSLMitm()) {
            // In the case of CONNECT, we just want to relay all data in both 
            // directions. We SHOULD make sure this is traffic on a reasonable
            // port, however, such as 80 or 443, to reduce security risks.
            cpf = new ChannelPipelineFactory() {
                @Override
                public ChannelPipeline getPipeline() throws Exception {
                    // Create a default pipeline implementation.
                    final ChannelPipeline pipeline = new DefaultChannelPipeline();
                    pipeline.addLast("handler", 
                        new HttpConnectRelayingHandler(browserToProxyChannel,
                            channelGroup));
                    return pipeline;
                }
            };
        }
        else {
            cpf = relayPipelineFactoryFactory.getRelayPipelineFactory(
                httpRequest, browserToProxyChannel, this);
        }
        
        cb.setPipelineFactory(cpf);
        cb.setOption("connectTimeoutMillis", 40*1000);
        log.debug("Starting new connection to: {}", hostAndPort);
        ChannelFuture cf;
        if (LittleProxyConfig.isUseDnsSec()) {
            cf = cb.connect(VerifiedAddressFactory.newInetSocketAddress(host, port, LittleProxyConfig.isUseDnsSec()));
        }else {
            final InetAddress ia = InetAddress.getByName(host);
            final String address = ia.getHostAddress();
            try{
                    /*мой код, здесь я пытаюсь выбрать сетевой интерфейс для отправки сообщения на сервер*/
                     NetworkInterface nif = NetworkInterface.getByName("neth2");                    
                     DatagramChannel channel = (DatagramChannel) cb.bind( new InetSocketAddress( "192.168.1.100", 80) );
                     InetSocketAddress addr = new InetSocketAddress(address, port);
                     cf = channel.joinGroup(addr,nif);
                    /**/
                 
            }catch(IOException e){
                    cf = cb.connect(new InetSocketAddress(address, port));
                    e.printStackTrace();
            }
        }
        allChannelFutures.add(cf);
        
        return cf;
    }


Естественно, ничего не происходят, данные от сервера не приходят. Вопрос: Как сделать правильно?

Это сообщение отредактировал(а) vadkasevas - 9.7.2013, 05:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0386 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.