# UDP Verbindung durch Proxy



## Dit_ (3. Sep 2010)

Hallo!

Ich versuche eine UDP Verbindung aufzubauen. Zuhause funktioniert alles, in der Schule aber wegen Proxy bekomme ich keine Antwort vom Server.

Hat jemand eine Idee was ich machen könnte?

```
System.setProperty( "socksProxyHost", "host" );
	System.setProperty( "socksProxyPort", "port" );
```

Hat nichts gebracht


Danke schon mal.


```
public class Connect {
  public static final int PORT = 80;

  public static final String getReply(String hostname) throws IOException {
	System.setProperty( "socksProxyHost", "host" );
	System.setProperty( "socksProxyPort", "port" );
   
    DatagramSocket socket = new DatagramSocket();

    byte[] in = ("echo").getBytes();
    byte[] out  = new byte[256];

    InetAddress host = InetAddress.getByName(hostname);
    
    DatagramPacket sendPacket 	 =  new DatagramPacket(in, in.length, host, PORT);
    DatagramPacket receivePacket = new DatagramPacket(out, out.length);

    socket.send(sendPacket);
    socket.receive(receivePacket);

    return new String(receivePacket.getData(), 0, receivePacket.getLength());
  }

  public static void main(String[] args) {
    String server = "google.com";

    try {
      System.out.print(getReply(server)); 
    } catch(IOException e) {
      e.printStackTrace();
    }
  }                   
}
```


----------



## oversoul (3. Sep 2010)

Das könnte schwer werden, da HTTP-Proxys meistens kein UDP routen können.  Ansonten dürfte sich das so verhalten, wie bei normalen Sockets -> eigenes Protokoll implementieren für Proxy

Evtl muste dein Programm auf TCP-Sockets umschreiben, da kann man dann auch HTTP-Proxys nutzen 

BTW:



Dit_ hat gesagt.:


> Ich versuche eine UDP Verbindung aufzubauen.



UDP ist ein verbindungsloses Protokoll


----------



## Dit_ (7. Sep 2010)

Hi

Und wie implementiere ich ein eigenes Protokoll, gibt es Interfaces dafür? Was muss ich dabei beachten?

Vielleicht weiss jemand wo ich was zu dem Thema nachlesen kann? Versuche schon seit Tagen das Problem zu lösen.

Normalerweise muss man doch dem Server Port mitteilen. 

```
public class Connect {
	//
	// static{
	// System.setProperty( "socksProxyHost", "143.56.32.11" );
	// System.setProperty( "socksProxyPort", "3000" );
	// }
	public static final String PROXY_HOST = "11.12.87.2";
	public static final int PROXY_PORT = 2001;
	public static final InetSocketAddress SERVER = new InetSocketAddress("54.1.45.88", 4600);

	
	
	
	
	private static final String getReply(String msg) throws IOException {
		String reply = "";

		InetSocketAddress myAddress = new InetSocketAddress(PROXY_HOST, PROXY_PORT);

		DatagramSocket socket = new DatagramSocket();
		byte[] in = (msg).getBytes("ISO-8859-1");
		byte[] out = new byte[1024];

		DatagramPacket sendPacket    = new DatagramPacket(in, in.length, SERVER);
		DatagramPacket receivePacket = new DatagramPacket(out, out.length, myAddress);
		//senden
		socket.send(sendPacket);
		//empfangen
		socket.receive(receivePacket);
		//"encoden"
		reply += new String(receivePacket.getData(), 0, receivePacket.getLength());

		socket.close();

		return reply;
	}

	public static void main(String[] args) throws IOException {
		String line = ("Antwort: "+ Connect.getReply(" echo")+"\n");
		System.out.println(line);
	}
```



Was macht eigentlich dieses Socket5 genau?


Danke schon mal

Gruß


----------



## oversoul (7. Sep 2010)

Bin mir gerade net sicher, aber soweit ich weiß gibts dafür keine Interfaces (höchstens überschreiben einer alten Klasse)

So Socks5 ist auch ein Proxy-Protokoll, es ist fähig, UDP-Pakete zu händeln. Wie allerdings das Socks5-Protokoll aussieht weiß ich nicht


----------



## HoaX (7. Sep 2010)

oversoul hat gesagt.:


> Wie allerdings das Socks5-Protokoll aussieht weiß ich nicht



Das schaut so aus: RFC1928 - SOCKS Protocol Version 5


----------

