2012-04-15 6 views
0

Ich verwende ein Servlet, das in Google AppEngine bereitgestellt wird, um mit der Remote-Port-Nummer des Clients zu antworten. HttpServletRequest.getRemoteAddr() funktioniert gut, aber getRemotePort() gibt 0 zurück?Java-Servlet gibt Remote-Port von 0 zurück?

Port 0 ist ungültig. Ich habe versucht, andere IP-Dienste, die mir normale Port-Nummern (d. H. 55046 oder etwas) sagte, aber mein Servlet gibt 0 jedes Mal zurück, wenn es von einem Browser oder von Java-Code zugegriffen wird.

Mein Endziel ist in der Lage, eine Verbindung Initiator zu sagen, Adresse und externen Port Standort des Empfängers auf Nachschlag so ein TCP Lochen Technik richtig funktioniert.

Was ist der Grund dafür? Wie bekomme ich die tatsächliche Portnummer (wenn möglich)? Verwendet ein NAT-Router keinen Proxy-Port?

+1

Es ist ein [Bug] (http://googleproof.org/gsubdomainiscode/p/googleappengine/issues/detail?id=4210) – tenorsax

+0

Nun, das ist ärgerlich. Vielen Dank. – bgroenks

Antwort

0

Ich bin mir nicht sicher, warum getRemotePort würde 0 zurück, aber für Ihr Endziel des Client-Port zu wissen, ist nutzlos. Der Client-Port wird für jede Verbindung neu zugewiesen. In der Tat, wenn die erste Verbindung 55046 verwendet, ist der ganze Punkt des Client-Ports für eine neue Verbindung, um eine andere und unbenutzte Client-Port-Nummer zu verwenden.

Dies macht es nutzlose Informationen für ein Loch in der Firewall-Richtlinie zu konfigurieren. Sie werden den Client-Port nicht benötigen. Sie benötigen den Serverport, die Serveradresse und optional die Clientadresse, wenn Sie nur den Zugriff von dieser Clientadresse aus zulassen möchten.

+0

"Löchst du nicht", wenn der Host eine Verbindung zur Client-Adresse initiiert (was fehlschlägt) und der Client dann eine Verbindung zum Host initiiert? Vielleicht funktioniert das nur bei UDP ... – bgroenks

+0

Durch Löcher denke ich Löcher in die Firewall-Politik. Ich weiß nicht, wovon du redest. Ich kenne kein Protokoll, bei dem der Host eine Verbindung zu einem Client herstellt. Das würde den Host zum Client machen und der Client wäre ein Server. Ich bin also nicht sicher, was du meinst, wenn du Klienten sagst und nicht weißt, wovon du sprichst. –

+0

NAT-Traversal. P2P-Client ----> Server <----- Host | Client <----- Server -----> Host | Client-Host-<-----> – bgroenks

Verwandte Themen