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