nasłuchiwanie na porcie 80

0

Witam! Napisałem prosty program który miał za zadanie nasłuchiwać na porcie 80 i podczas przeglądania stron www drukować na konsoli adres obecnie wyświetlanej strony lecz niestety tak się nie dzieje. Oto mój kod:

 import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Site implements Runnable {
	
	private int port;
	
	Site(int port){
		this.port = port;
	}

	public void run() {
		try {
			ServerSocket server = new ServerSocket(port);
			while(true){
				System.out.println("test1");
				Socket socket = server.accept();
				System.out.println("test2");
				System.out.println(socket.getInetAddress());
				socket.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String args[]){
		
		Thread thread = new Thread(new Site(80));
		thread.start();
		
	}
	
} 

Program się kompiluje lecz tylko jeden raz jest w pętli while tzn "zawiesza się" na metodzie server.accept() w sumie nie wiem dlaczego. Ktoś wie może co robię nie tak? Jest jakiś inny sposób aby podrzeć co jest przesyłane na porcie 80? Pozdrawiam

0

Ale przecież Ty tam nic więcej nie robisz jak słuchasz na tym porcie... zresztą z docs;ów
"Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made. "

0

Nie wiem czy dobrze rozumiesz ideę nasłuchiwania serwera. Podczaz przeglądania stron www przeglądarka musiała by wysyłać do Twojego serwera określone dane żebyś mógł je sobie w tej konsoli wyświetlić. Poza tym socket u Ciebie jest blokowany dopóki nie nadejdzie nowe połączenie do serwera. Program nie wisi tylko czeka na podłączenie klienta. Żeby połapać ruch z przeglądarki musiałbyś napisać sniffera czyli program pobierający pakiety bezpośrednio z karty sieciowej. Żeby Twoja aplikacja cokolwiek wyświetliła tak jak to rozumiesz to przeglądarka musiała by wysłuchać (matko kochana! wysłać powinno być - z komórki to pisałem) requesta nie do Internetu tylko np do localhosta.

Sniffery i asychroniczne lub wielowątkowe sockety do poczytania.

0

To co napisałeś w ogóle nie na sensu.

  1. Ty po prostu czekasz na połączenie TCP na zadanym porcie a nie sniffujesz pakiety.
  2. Port 80 to jest otwarty na serwerze! Po twojej stronie przeglądarka używa losowego portu efemerycznego. Więc nawet gdybyś umiał napisać kod do sniffowania to guzik byś na tej 80 zobaczył...

1 użytkowników online, w tym zalogowanych: 0, gości: 1