问个难题:获取当前活动连接的物理网卡解决方法
问个难题:获取当前活动连接的物理网卡
我现在有两个网卡,一个有线,一个无线,都是连通网络的.禁用其中任何一个都能正常上网.现在两个都是开启的.
还有复杂一点的情况,我在家的时候会使用拔号连接,我的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获取相关信息,可以参考下。
我现在有两个网卡,一个有线,一个无线,都是连通网络的.禁用其中任何一个都能正常上网.现在两个都是开启的.
还有复杂一点的情况,我在家的时候会使用拔号连接,我的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