Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / December 2005

Tip: Looking for answers? Try searching our database.

Detecting virtual IP addresses

Thread view: 
Joseph Dionne - 05 Dec 2005 20:19 GMT
Is there anyway to detect a virtual IP address?

I currently use NetworkInterface to enumerate all local IP addresses.  I then
filter out the isLocalAddress and all Inet6Address objects, but I do not know
how to detect a virtual IP address, provided by VPN connection or VMWare.

The application binds the client socket to each NIC (IP address) on the server
to light up all interfaces, however Socket.bind() fails on virtual IP
addresses, so I need detect and filter them out.

Thanks.
Joseph
Gordon Beaton - 05 Dec 2005 19:50 GMT
> Is there anyway to detect a virtual IP address?
>
[quoted text clipped - 6 lines]
> the server to light up all interfaces, however Socket.bind() fails
> on virtual IP addresses, so I need detect and filter them out.

It's not entirely clear what you mean by "the client binds the socket
to each NIC on the server". The *client* can't bind sockets to the
*servers* interfaces, it can bind sockets to its own interfaces. Do
you mean connect?

At any rate, it seems you answer your own question: do the filtering
by noticing which ones fail. Conceptually there is no difference
between the virtual interfaces created by vmware and any physical
interface. In particular they should appear equivalent to your
application (and I don't see why your operation should fail).

Another alternative is to see which ones are called "vmnet*".

/gordon

Signature

[  do not email me copies of your followups  ]
g o r d o n + n e w s @  b a l d e r 1 3 . s e

Joseph Dionne - 05 Dec 2005 21:50 GMT
>>Is there anyway to detect a virtual IP address?
>>
[quoted text clipped - 11 lines]
> *servers* interfaces, it can bind sockets to its own interfaces. Do
> you mean connect?

Sorry, "my server" is synonymous to "my system," i.e. I bind my client side
socket using Socket.bind(SocketAddress).  This picks the interface on the
local system to use for the connection when Socket.connect() is called.

> At any rate, it seems you answer your own question: do the filtering
> by noticing which ones fail. Conceptually there is no difference
> between the virtual interfaces created by vmware and any physical
> interface. In particular they should appear equivalent to your
> application (and I don't see why your operation should fail).

Obviously there is a difference between "virtual interfaces" and physical
interfaces, i.e. NIC cards.  Socket.bind() is not throwing an exception, but
rather Socket.connect() is timing out on connections from the local virtual
"interfaces," even though it is on the same network as the remote host.

It is my assumption that I cannot bind to a virtual "interface," and I could
be wrong.  However, since the only "error" is a connection timeout, that does
not provide any useful information to detect virtual IP addresses.

> Another alternative is to see which ones are called "vmnet*".
>
> /gordon
Gordon Beaton - 06 Dec 2005 06:54 GMT
> It is my assumption that I cannot bind to a virtual "interface," and
> I could be wrong. However, since the only "error" is a connection
> timeout, that does not provide any useful information to detect
> virtual IP addresses.

A network interface as seen by the application - virtual or otherwise
- is nothing but a data structure in the kernel, regardless of whether
there is an underlying physical interface. If it were not possible to
bind a Socket to them they would be of little use to anyone, since
binding is an inherent part of every Socket connection (even though
it's usually implicit on the client side).

There is AFAIK no way for an application to detect with certainty
whether a given interface is virtual or not, even from C. Use a
heuristic instead, for example the vmware interfaces are usually
called vmnet0 etc.

It sounds to me like your problem is one of routing, i.e. "you can't
get there from here". When you bind your Socket to one of the virtual
interfaces it can't reach the destination you're trying to connect to.
Have a look at your routing table, and try using ethereal to see what
actual traffic is generated.

/gordon

Signature

[  do not email me copies of your followups  ]
g o r d o n + n e w s @  b a l d e r 1 3 . s e

Joseph Dionne - 05 Dec 2005 22:53 GMT
Never mind.  My problem is most definitely a routing problem.

Joseph

> Is there anyway to detect a virtual IP address?
>
[quoted text clipped - 11 lines]
> Thanks.
> Joseph


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.