2012-12-04 12 views
5

Używam biblioteki java sbbi do przekazywania portów. ale mój router jest podłączony do innego routera, , więc zewnętrzny adres IP pierwszego routera to ip, który został nadany przez drugi router dhcp. czy istnieje sposób przekazywania portów na drugim routerze? tutaj jest mój kod:jak uaktualnić porty do przodu za pomocą dwóch poziomów routerów

InternetGatewayDevice[] devices=InternetGatewayDevice.getDevices(1000); 
System.out.println("Found "+devices.length+" Devices"); 
InternetGatewayDevice dev = devices[ 0 ]; 
System.out.println(dev); 
System.out.println("External IP = " + dev.getExternalIPAddress()); 

System.out.println(dev.addPortMapping("Streamternet", "TCP", null, 1333, 
             "192.168.0.105", 8888, 0)); 

System.out.println("waiting for connection"); 
HTTPServer.main(null); 

Odpowiedz

2

O ile wiem, to nie jest to możliwe z aktualnej konfiguracji, ponieważ nie może uzyskać dostępu do bramy routera bezpośrednio.

Są 2 rozwiązania, które mogę wymyślić.

  1. Wyłącz serwer DHCP routera tak, że on i wszyscy uzyskać IP z drugiego routera, a ponad wszystko będziesz mieć tę samą podsieć i można uzyskać dostęp do każdego z routerów.
  2. Masz inny komputer, który jest podłączony do drugiej sieci routera i uczyń go serwerem, który słucha twoich poleceń, a ten serwer wykona dla ciebie zadania UPNP. (Najprawdopodobniej będzie to wymagało ręcznej konfiguracji przekierowania portów)

Mam nadzieję, że pomogę.

+0

to nie jest opcja ... Zajmuję się tworzeniem oprogramowania, nie mogę powiedzieć, moi użytkownicy zrobić to – Dima

+0

może ty mi w tym pomóc? http://stackoverflow.com/questions/16092747/java-sbbi-upnp-cant-find-internet-gateway-device-sometimes – Dima

+0

Jak się masz, że Twoi użytkownicy mają po dwa routery jeden po drugim? – Danpe

3

Jak @Danpe powiedział w swojej odpowiedzi, UPnP nie pozwoli ci otworzyć portów, gdy jesteś za wieloma NAT.

Jak ja również pracuje na oprogramowaniu P2P i od tego, co już zebrane, o to co można spróbować połączyć dwa równorzędne:

  1. Połącz używając protokołu TCP lub UDP hole punching.
  2. Jeśli powyższe nie działa, jeden z routerów po obu stronach używa Symmetric NAT. Spróbuj UPnP lub NAT-PNP.
  3. Jeśli powyższe nie działa, aplikacja znajduje się za routerem, który nie obsługuje funkcji UPnP, NAT-PNP ... lub znajduje się za wieloma poziomami translacji adresów sieciowych. Teraz możesz:

    1. Komunikuj się z użytkownikiem aplikacji, która potrzebuje otworzyć porty na tych routerach. Jest to, jak już wspomniałeś w komentarzach, niefortunne rozwiązanie, ponieważ zakłada ono zaawansowaną wiedzę techniczną od użytkownika. Ale wydaje się, że tak właśnie robią niektóre firmy. Zobacz na przykład here.

    2. Użyj serwera przekazującego, takiego jak ten używający TURN protocol, za pośrednictwem którego będą komunikować się użytkownicy z zamkniętymi portami. Ten serwer przekazujący może być jednym lub więcej równorzędnymi, których porty są otwarte (jak to jest w przypadku uTorrent), lub może być twoim serwerem, lub kombinacją dwóch: jeśli istnieją peery z otwartymi portami, użyj ich, inaczej używaj własny serwer (tak jest w przypadku Skype).

Powiązane problemy