A
Andreas999
Gast
Hallo,
ich sitze hinter einem DSL-Router mit einer Firewall und möchte UDP-Punching implementieren. Ausgehende Dienste sind bei mir erlaubt, Eingehende gesperrt. Skype und gestreamte Filme aus dem Internet funktionieren. Bei UDP punching muß jeder Sender etwas senden, damit er etwas empfangen kann. So habe ich es jedenfalls verstanden:
Wenn die Ports in der Firewall frei geschaltet sind und man den richtigen Zielrechner einträgt, funktioniert mein Programm sogar übers Internet. Jedoch ist das noch kein UDP punching. Denn wenn die Ports wieder zu sind, kommt nichts an.
Ich vermute, daß bei eingehenden Paketen die Firewall die Ports ändert. Wie bekomme ich dennoch dieses UDP punching hin?
Alles Gute!
Andreas
ich sitze hinter einem DSL-Router mit einer Firewall und möchte UDP-Punching implementieren. Ausgehende Dienste sind bei mir erlaubt, Eingehende gesperrt. Skype und gestreamte Filme aus dem Internet funktionieren. Bei UDP punching muß jeder Sender etwas senden, damit er etwas empfangen kann. So habe ich es jedenfalls verstanden:
Code:
import java.io.*;
import java.net.*;
public class Punching extends Thread{
DatagramSocket oDatagramSocket;
public Punching(DatagramSocket oDatagramSocket){
this.oDatagramSocket=oDatagramSocket;
}
public void run(){
if(this.oDatagramSocket==null) return;
byte[] recBytes=new byte[6];
DatagramPacket recDatagram;
recDatagram = new DatagramPacket(recBytes,recBytes.length);
while(true){
try {
oDatagramSocket.receive(recDatagram);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
recBytes=recDatagram.getData();
System.out.println(new String(recBytes));
try {
sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
//Zielrechner
String name="localhost";
//gemeinsamer Port
int port=8000;
DatagramSocket oDatagramSocket=null;
DatagramPacket oDatagramPacket=null;
try {
oDatagramSocket=new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String sDaten="Hallo!";
byte [] bytes=sDaten.getBytes();
try {
oDatagramPacket=new DatagramPacket(bytes,bytes.length,InetAddress.getByName(name),port);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Punching oPunching=new Punching(oDatagramSocket);
oPunching.start();
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
try {
oDatagramSocket.send(oDatagramPacket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Wenn die Ports in der Firewall frei geschaltet sind und man den richtigen Zielrechner einträgt, funktioniert mein Programm sogar übers Internet. Jedoch ist das noch kein UDP punching. Denn wenn die Ports wieder zu sind, kommt nichts an.
Ich vermute, daß bei eingehenden Paketen die Firewall die Ports ändert. Wie bekomme ich dennoch dieses UDP punching hin?
Alles Gute!
Andreas