как работает HTTP-туннелирование?

Я просматривал библиотеку JHttpTunnel, и этот фрагмент кода в OutBoundSocket.java меня немного смутил.

 public void connect() throws IOException{
close();

String host=getHost();
int port=getPort();

String request="/index.html?crap=1 HTTP/1.1";

Proxy p=getProxy();
if(p==null){
  socket=new Socket(host, port);
  request="POST "+request;
}
else{
  String phost=p.getHost();
  int pport=p.getPort();
  socket=new Socket(phost, pport);
  request="POST http://"+host+":"+port+request;
}
socket.setTcpNoDelay(true);

in=socket.getInputStream();
out=socket.getOutputStream();
out.write(request.getBytes());
out.write(_rn);
out.write(("Content-Length: "+getContentLength()).getBytes());
out.write(_rn);
out.write("Connection: close".getBytes());
out.write(_rn);
out.write(("Host: "+host+":"+port).getBytes());
out.write(_rn);

out.write(_rn);
out.flush();

sendCount=getContentLength();

}

Кажется, это напрямую открывает сокет для сервера. Брандмауэр не блокирует это?


person mihirg    schedule 02.06.2011    source источник


Ответы (1)


Брандмауэр может заблокировать его, но это зависит от конфигурации, вы можете спросить, не блокирует ли это прокси, и ответ будет таким же. Вышеприведенный код является лишь небольшой частью более широкой картины... Но обычно HTTP-туннелирование должно открывать сокет для HTTP-сервера и инкапсулировать простой поток по HTTP-запросам, чтобы отправлять эти запросы через сокет между HTTP-клиентом и Требуется HTTP-сервер, и это то, что вы видите здесь. Чего вы не видите в этом коде, так это инкапсуляции. Я надеюсь, что это помогло.

person ApriOri    schedule 05.07.2012