问个难题:获取当前活动连接的物理网卡解决方法

问个难题:获取当前活动连接的物理网卡
我现在有两个网卡,一个有线,一个无线,都是连通网络的.禁用其中任何一个都能正常上网.现在两个都是开启的.
还有复杂一点的情况,我在家的时候会使用拔号连接,我的ADSL网线是插在路由上,电脑可以通过无线,和接一根网线连接到路由,禁用其中任何一个都可以正常使用网络,然后在我电脑上拔号(不知道为什么现在路由拔不上号了)连接宽带.


我现在开着Chrome在写帖子,我想知道现在Chrome是用哪个网卡,哪个网络连接联接的网络.
如果我在家上网用Chrome发帖子,我怎样知道我用的是哪个网卡,哪个网络连接(本地连接,无线网络连接,宽带连接PPOE)联接的网络?
再复杂一点的,在家的时候为了能连接上某个特定的服务器进行工作,我需要安装CISCO的VPN客户端.连接到这个服务器首先要保证我的电脑连接到路由(有线无线都行),然后再拔号连接到宽带,再拔号连接到VPN,我还是用Chrome连接的这个服务器,那我知道到底是哪个网卡连接的服务器?
可能还有更复杂的情况,就不例举了,反正就是告诉你,我有很多网卡,物理的,虚拟的,连接情况也是复杂的.

我问这个问题的目的是这样的:我写了一个简单的WEB页面,连接服务器数据库.我希望在用户登录的时候,记录下当前登录用户客户端使用的网卡地址(MAC)和IP地址.当然,用户可能有多个网卡(可能还有虚拟的,像防火墙的虚拟的网卡,VPN软件虚拟的网卡等等,反正都算那个连接到网络的物理网卡),也就有多个MAC和IP,但我想知道我的客户端到底是用哪一个物理网卡连接的.

为了获取客户端的这些信息,我可以在客户端安装任何组件,也就是说可以使用客户端的资源,如注册表,WMI,或者自己写个COM DLL在客户端安装,再在JS或VBS中调用.如果还不好理解的话,可以把我的WEB页面想象成一个WINFORM的客户端.


------解决方案--------------------
路过
估计还得你自己解决

------解决方案--------------------
参考一下这个,看看有用否:
http://download.****.net/source/2119050
------解决方案--------------------
tcpview
http://technet.microsoft.com/en-us/sysinternals/bb545027.aspx
------解决方案--------------------
bind函数
------解决方案--------------------
可以抓数据链路层的包,那里面有网卡物理地址信息,不过我不懂。
下面是利用WMI中的Class Win32_NetworkAdapter获取相关信息,可以参考下。
VB code

Option Explicit

'http://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx
'Class Win32_NetworkAdapter: CIM_NetworkAdapter
'{
'  string   AdapterType;
'  uint16   AdapterTypeID;
'  boolean  AutoSense;
'  uint16   Availability;
'  string   Caption;
'  uint32   ConfigManagerErrorCode;
'  boolean  ConfigManagerUserConfig;
'  string   CreationClassName;
'  string   Description;
'  string   DeviceID;
'  boolean  ErrorCleared;
'  string   ErrorDescription;
'  string   GUID;
'  uint32   Index;
'  datetime InstallDate;
'  boolean  Installed;
'  uint32   InterfaceIndex;
'  uint32   LastErrorCode;
'  string   MACAddress;
'  string   Manufacturer;
'  uint32   MaxNumberControlled;
'  uint64   MaxSpeed;
'  string   Name;
'  string   NetConnectionID;
'  uint16   NetConnectionStatus;
'  boolean  NetEnabled;
'  string   NetworkAddresses[];
'  string   PermanentAddress;
'  boolean  PhysicalAdapter;
'  string   PNPDeviceID;
'  uint16   PowerManagementCapabilities[];
'  boolean  PowerManagementSupported;
'  string   ProductName;
'  string   ServiceName;
'  uint64   Speed;
'  string   Status;
'  uint16   StatusInfo;
'  string   SystemCreationClassName;
'  string   SystemName;
'  datetime TimeOfLastReset;
'};


Function Win32_NetworkAdapter()
    Dim objWMIService, strComputer
    Dim colNetworkAdapters, objNetworkAdapter
    
    strComputer = "."
    
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    Set colNetworkAdapters = objWMIService.ExecQuery("Select * From Win32_NetworkAdapter Where PhysicalAdapter=True And NetEnabled=True")
    
    Debug.Print colNetworkAdapters.Count
    
    For Each objNetworkAdapter In colNetworkAdapters
        With objNetworkAdapter
            Debug.Print .ProductName, .Speed
            Debug.Print .Manufacturer, .MACAddress, .PNPDeviceID
            Debug.Print .NetConnectionID, .NetConnectionStatus, .NetEnabled, .Availability
            Debug.Print .Guid, .AdapterType, .AdapterTypeID
            '禁用
            '.Disable
            '启用
            '.Enable
        End With
    Next
End Function