как работает HTTP Tunneling? - PullRequest
1 голос
/ 02 июня 2011

Я взглянул на библиотеку 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();

}

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

1 Ответ

0 голосов
/ 05 июля 2012

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

...