2008-11-06 6 views
6

Ich habe ein System, in dem verschiedene Serverprozesse Anforderungen bearbeiten, die als JMS-Nachrichten von verschiedenen Clients über einen JMS-Broker übergeben werden.Gibt es eine Möglichkeit, die ursprüngliche IP-Adresse aus einer JMS-Nachricht zu erhalten?

Ich versuche, die Quelle der Nachrichten zu identifizieren. Gibt es eine Möglichkeit, die IP oder einige identifizierende Informationen über die Herkunft zu erhalten?

Klarstellung: Ich habe bereits den Client von unbekannten Benutzern eingesetzt haben, so versuche ich, Klassen zu ändern Meldung zu vermeiden ...

Antwort

3

Es gibt eine optionale JMS-Header in der Spezifikation JMSXUserID genannt JMS genannt, die die den Benutzer identifiziert eine Nachricht zu senden (die der Broker überprüft und gewährleistet die richtige ist Spoofing zu vermeiden), die einige JMS Provider unterstützen.

Zum Beispiel hier ist how to enable it in Apache ActiveMQ

1

Ich glaube nicht. Zumindest konnte ich keinen Weg finden.

Wenn Sie eine Antwort zurück an die Quelle der Nachricht senden müssen, kann der Absender die Eigenschaft "JMSReplyTo" festlegen und auf dieses Ziel antworten.

Oder Sie könnten Ihr Messaging-Schema leicht ändern und die Quellinformationen selbst einbetten. Der Absender würde sich in der Nachricht identifizieren und der Empfänger könnte es von dort lesen.

0

Wenn Sie die Konstruktion der gesendeten Nachrichten steuern können, können Sie der Nachricht immer die IP-Adresse als Eigenschaft hinzufügen. Dann können Sie den Wert mit der Methode getStringProperty auf Message prüfen.

+0

Jinks! (Was wir als Kinder gesagt haben, wenn wir dasselbe gleichzeitig mit jemand anderem gesagt haben) –

+0

haha, du schuldest mir eine Cola :). – fawce

0

Wenn Sie den Code der Clients steuern, die die Nachrichten senden, können Sie einen Eigenschaftsnamen erfinden, z. B. "IPOfSender", und diese Eigenschaft für jede Nachricht mit Message.setStringProperty() einschließen.

// client code 
String myIPString = ...; 
Message m = session.createTextMessage(); 
m.setStringProperty("IPOfSender", myIPString); 
... 
+0

Das ist gar nicht so einfach. Wie erkennen Sie die Client-IP? Die meisten IPs sind hinter einer NAT in einem Intranet und Sie erhalten nur eine interne IP wie 192.168.100.1 – Marcel

+1

Dann können Sie Pech haben. - Es gibt keinen Standard Weg, um es zu erreichen - Sie können anscheinend nicht Ihren Kunden helfen + Vielleicht hat Ihre JMS-Implementierung einige Funktionen, dies zu tun. Nicht tragbar, aber vielleicht gut genug für dich. –

0

Es hängt von Ihrem JMS Server ab. Einige Server verfügen über Admin-Tools/APIs, mit denen Sie Verbindungsdetails anzeigen können.

0

Glasfischen verwenden, wenn Sie das getJMSMessageID sehen() die Nachricht, Sie eine Zeichenfolge an den Effekt von „ID sehen sollen: 40-192.168.0.242 (f5: 62: c6: 58: 22: 6f) -52506-122885191641 ". Es scheint, als ob die IP eine Teilzeichenfolge der Nachrichten-ID ist.

Bitte beachten Sie, dass dies ist, was ich unter unserem Setup sehen kann, so dass es andere Faktoren spielen kann (zB. Frühling), aber ich weiß, dass String nicht von uns programmatisch erstellt wurde.

Verwandte Themen