Detecting virtual IP addresses

G

Gordon Beaton

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.

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
 
J

Joseph Dionne

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
 
J

Joseph Dionne

Gordon said:
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?

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.
 
G

Gordon Beaton

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top