I know this IOR may contain multiple components.The typical IOR normally contains the IP address of the remote host, the number of the remote port on that the CORBA server is listening, a string defining the class of the remote object on which the methods will be invoked, and the object key that is used by the server ORB to identify the object.
Is it possible that when I decode an IOR it gives me HOST NAME instead of IP Address.?
that is, it resolves like Machine-abc.co.in instead of some IP Adress like 192.168.64.56
Set this to use DNS names in IORs
jacorb.dns.enable=on
Also , refer http://jacorb.org/bugzilla/show_bug.cgi?id=872
Related
How would you get the domain name of from a TCP connection?
As I'm trying to make a proxy type software but it must detect what the domain is and then go where it needs to. However I'm unsure how to get the domain name from the client.
There is no general way to get the target domain or host name from of the TCP connection, because a connection is only defined by its target IP address and not the host name and there might be several names for a single target IP address. But while there is no general way to get the target name from all TCP connections it is possible with some protocols on top of HTTP:
In case of HTTP you might look at the HTTP Host header which contains the target host name and is set by nearly all HTTP stacks (required with HTTP/1.1).
With SSL you might try to extract the host name from the initial ClientHello message in the SSL handshake, in case the client uses SNI (server name indication). All modern browsers use SNI, but older browser like IE8 not and also not older Java, Python, Perl, Ruby ... applications.
You may use the following code snippet which will give local domain name -
try {
InetAddress me = InetAddress.getLocalHost();
String dottedQuad = me.getHostAddress();
System.out.println("My address is " + dottedQuad);
} catch (UnknownHostException e) {
System.out.println("I'm sorry. I don't know my own address.");
}
Under what circumstances does InetAddress.getLocalHost().getHostAddress() return a different IP address than InetAddress.getByName("localhost")?
On my system, one returns 192.168.0.2 while the other returns 127.0.0.1
seems, InetAddress.getLocalHost().getHostAddress() is returning your system ip and InetAddress.getByName("localhost") the loopback address.
I doubt the security manager case described by Parthian for getByName, As per InetAddress API specification for getByName():
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getByName%28java.lang.String%29
The method throws: SecurityException - if a security manager exists and its checkConnect method doesn't allow the operation.
whereas getLocalHost() doesn't throw any such exception but returns loopback address as failsafe.
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getLocalHost%28%29
getByName() needs to connect to DNS to resolve hostname.
getByName() in this case is resolving 'localhost' from /etc/hosts(linux) or C:\Windows\System32\drivers\etc (windows). The hostname ip pair is user configurable in these files.
To check, you can provide any value to localhost, e.g: localhost 127.0.0.2 in hosts file, and getByName will return it.
According to this:
"[InetAddress.getLocalHost()] Returns the address of the local host. This is achieved by retrieving the name of the host from the system, then resolving that name into an InetAddress.
Note: The resolved address may be cached for a short period of time.
If there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. If the operation is not allowed, an InetAddress representing the loopback address is returned."
Probably what's happened is you're getting the loopback address because your security manager doesn't allow you to connect using the local subnet's 192 address.
InetAddress.getByName("localhost") justs asks the operating system to perform a name resolution, from what I can tell, anyway.
Java is giving 127.0.0.1 as IP for InetAddress.getByName("localhost").getHostAddress()
But why java not gives "localhost" for InetAddress.getByName("127.0.0.1").getHostName. For later one I get "127.0.0.1" as host name. Please clarify this.
The javadoc of InetAddress.getByName(String) states
The host name can either be a machine name, such as "java.sun.com", or
a textual representation of its IP address. If a literal IP address is
supplied, only the validity of the address format is checked.
So it doesn't actually go to your hosts file (or DNS) for an IP address. It just creates a InetAddress object with both hostname and address created from the String you provided.
For your first example
InetAddress.getByName("localhost").getHostAddress()
Assuming you have a hosts file entry like
127.0.0.1 localhost
then the InetAddress object returned will have that information, ie. a hostname of localhost and an address of 127.0.0.1.
Similarly, if you had
1.2.3.4 this.is.a.name
and
InetAddress localhost = InetAddress.getByName("this.is.a.name");
The returned InetAddress would be constructed with a hostname of this.is.a.name and an address of 1.2.3.4, because it actually went and checked.
Quick question regarding this
Socket(String host, int port)
If I use these arguments in a client, how would a specify the server have a name and thus reference it in the client?
EDIT
Please excuse me if it's vague.
I'm writing and instant messenger in java and using this constructor for the client side socket, it wants to receive the host's name as a string and the host's port as a int. What I'm asking is how do I set/find the host's name in this case?
For example, is the String simply "127.0.0.1" if I'm running it locally? Or is it a specified name like "JavaServer" that I set somewhere somehow?
Well, you could read the documentation for that constructor :-)
It's either a host name (e.g. "chatserver.domain.com") or and IP address as a String (e.g. "192.168.1.10")
I've tried many examples on web and one of them is this:
http://zerioh.tripod.com/ressources/sockets.html
All of the server-client socket examples work fine when they are tested with 127.0.0.1
BUT it never ever EVAR works on two different computers with actual raw real IP address ("could not connect to host" on telnet and "connection timed out" when tested on java client - the server program just waits for connection)
Note:
Firewall is turned off for sure
IP address from ipconfig didn't work
IP address from myipaddress.com (which is totally different for no reason than that from ipconfig) didn't work
What is it that I'm missing?
If I can only figure this out...
Try binding on 0.0.0.0. This tells your socket to accept connections on every IP your local can accept upon.
Based on the comment where the the following snippet of code is mentioned:
requestSocket = new Socket("10.0.0.5", 2004); // ip from ipconfig
it would be better to use the hostname instead of the IP address in the constructor, as the two-parameter Socket constructor with a String argument expects the hostname as the String, and not an IP address. A lookup of the IP address is then performed on the provided hostname.
If you need to pass in an IP address, use the two-parameter constructor that accepts the InetAddress as an argument. You can then provide a raw IP address to the InetAddress.getByAddress method, as shown in the following snippet:
InetAddress addr = InetAddress.getByAddress(new byte[]{10,0,0,5});
You'll need to be careful when specifying arguments via the byte array, as bytes are signed in Java (-127 through +128), and numbers beyond this range (but valid octets of IP addresses) may have to be specified using Integer.byteValue.
Finally, it should be noted that it is important to specify the IP address of the remote machine, as visible to the client. The IP address listed at myipaddress.com may be the address of a proxy, as that is the public IP of your entire network as visible to the host server at myipaddress.com. Therefore, you ought to be specify the IP address of the remote machine that is visible to your machine and not myipaddress.com.