搜档网
当前位置:搜档网 › 获取MAC地址和IP地址的程序设计

获取MAC地址和IP地址的程序设计

获取MAC地址和IP地址的程序设计
获取MAC地址和IP地址的程序设计

获取MAC地址和IP地址的程序设计

通信0402班学号:0905040225 姓名:张玉海指导老师: 王国才

【设计目标】

通过设计程序能获取本计算机的MAC地址和IP地址并显示。

【设计原理和方法】

本程序设计包含两个部分:一、获取本机IP地址;二、获取本机MAC地址。我是通过VB编程实现的。

其中,为了获取本机的IP地址,要使用WinSock库,WinSock API是Microsoft Windows 的网络程序接口。应用程序在使用WinSock API之前,必须调用WSAstartup函数,只有调用函数成功返回(表示应用程序与WinSock库成功的简历其连接),应用程序才可以调用其他Windows Socketers .DLL中的函数。当程序将要结束时,又必须调用WSACleanup函数可以结束Windows Socketers .DLL的使用。WinSock规范定义了几个数据库的例程。其中我们要用到gethostname和gethostbyname两个函数来得到IP地址。gethostname可以获得主机名, gethostbyname函数能够从主机名得到对应的“主机”(由名字和地址标识),函数唯一的参数name就是前面调用gethostname函数得到的主机名,二返回值是一个hostent结构,他可以标识一个“主机”列表,hostent的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址,hAddrList是一个列表,通过它就可以得到所有的IP地址。

MAC地址也叫物理地址、硬件地址或链路地址,此程序设计的获取MAC地址是通过NetBIOS编程实现的。其中,要用到网络编程接口中的一个重要的概念,那就是LANA编号(LAN适配器编号,LANadaprer),每张物理网卡都会分配一个独一无二的LANA编号。要想调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在Visual Basic中可以这样引入:

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte

函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。NetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知其的MAC地址的一条可行路径。其中在网络适配器状态命令的ADAPTER_STA TUS结构中我们最为关心的就是adapter_address字段,它标识的就是网卡的MAC地址。

【设计的功能】

用Visual Basic进行网络编程,通过使用WinSock API和NetBIOS API分别获取IP 和MAC地址,并能够显示出来。

【程序框图】

程序流程图分为两部分,获取MAC地址的部分和获取IP地址的部分。

获取MAC地址的主程序流程图如下:

获取IP地址的主程序流程图如下:

【设计思想及主要函数介绍】

此程序的运行也分为两大块,获取IP部分和获取MAC部分。

一、获取IP部分:

这部分需要调用Windows Sockets应用程序,在使用之前要对 Windows Sockets.dll 中的一些函数声明。下面是需要用到的一些函数:

连接Winsock库:int WSAstartup(WORD wversionrequested; LPWSDATA lpwsadata; )应用程序在调用Winsock API之前,必须调用该函数,只有该函数成功返回才可以调用其他Windows Sockets.dll中的函数

断开Winsock库:int WSAcleanup(void)

Sockets初始化函数:SocketsInitialize(),该函数就是对Windows Sockets初始化的函数,如果初始化成功,则返回值:Ture;若不成功,则返回值:Flase。具体函数原型见程序源代码。

Gethostname函数可以得到本地主机名,其函数原型如下:

Int gethostname(char name; int namelen)

Name参数用来接收本地主机名的缓冲区地址;namelen参数用来接收缓冲区的大小。

Gethostbyname函数能够从主机名得到对应的“主机”,其函数原型如下:

Struct hostent Gethostbyname( char name)

函数唯一name就是前面调用gethostname函数得到的主机名,而返回制是一个hostent 结构,它可以标识一个“主机列表”,hostent结构定义如下:

Private Type HOSTENT

hName As Long

hAliases As Long

hAddrType As Integer

hLen As Integer

hAddrList As Long

从其中的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址。hAddrList是一个列表,通过它就可以得到所有的IP地址。

在调用Winsock中的函数时应注意一些事项,如gethostbyname()指向区域是由Windows Sockets函数库分配的,这些指针指向的数据是容易丢失的。它们只有在该线程下一个Windows Sockets API调用前有效,此外,应用程序不应该试图修改这个结构,或者释放其中的任何一部分。

主函数GetIPAddress()获得IP地址的方法稍微复杂一点,它的核心思想是先获取主机名,然后在主机名的基础上调用Gethostbyname获得描述主机的结构信息并从中解析出主机的IP地址。

二、获取MAC地址部分

这部分需要调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API 包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在Visual

Basic中可以这样引入:

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte

函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。NET_CONTROL_BLOCK结构的定义如下:Private Type NCB

ncb_command As Byte

ncb_retcode As Byte

ncb_lsn As Byte

ncb_num As Byte

ncb_buffer As Long

ncb_length As Integer

ncb_callname As String * NCBNAMSZ

ncb_name As String * NCBNAMSZ

ncb_rto As Byte

ncb_sto As Byte

ncb_post As Long

ncb_lana_num As Byte

ncb_cmd_cplt As Byte

ncb_reserve(9) As Byte

ncb_event As Long

End Type

NetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知本机的MAC地址的一条可行路径。其中在网络适配器状态命令中的结构:ADAPTER_STATUS该结构的定义如下:

Private Type ADAPTER_STATUS

adapter_address(5) As Byte

rev_major As Byte

reserved0 As Byte

adapter_type As Byte

rev_minor As Byte

duration As Integer

frmr_recv As Integer

frmr_xmit As Integer

iframe_recv_err As Integer

xmit_aborts As Integer

xmit_success As Long

recv_success As Long

iframe_xmit_err As Integer

recv_buff_unavail As Integer

t1_timeouts As Integer

ti_timeouts As Integer

Reserved1 As Long

free_ncbs As Integer

max_cfg_ncbs As Integer

max_ncbs As Integer

xmit_buf_unavail As Integer

max_dgram_size As Integer

pending_sess As Integer

max_cfg_sess As Integer

max_sess As Integer

max_sess_pkt_size As Integer

name_count As Integer

End Type

其中的adapter_address字段,标识的就是网卡的的MAC地址,这样就可以得到LANA 编号。

主程序GetMACAddress()中,两次调用了Netbios函数:第一次调用Netbios函数采用的是NCBRESET命令,目的是重置所有的LANA编号,第二次调用则用的是适配器状态命令NCBASTAT,通过它可取得本地计算机制定的LANA编号有关的结构信息,从这个结构信息中我们就可以解析出网卡的物理地址,然后把网卡MAC地址格式化成常用的16进制形式显示出来。

【测试数据及其结果】

这个程序需要用的库函数比较多,所以要注意函数的声明,结构类型的定义,刚开是由于没有定义完全,因此编译结果总是提示“子函数未定义”,经过上网查询和翻阅资料,终于解决了所有函数的与库函数的成功连接,以及一些函数的定义。

程序的运行结果比较简单,界面简洁明了,程序操作简单、方便。整个程序界面包括两个Label控件、两个TextBox控件、三个CommandButton控件。两个TextBox分别用来显示IP和MAC地址,一个CommandButton用来获取IP和MAC地址,一个CommandButton 用来清空两个TextBox来重新获取IP和MAC地址,还有一个CommandButton来退出程序。程序界面如下:

如果程序编译成功,那么程序就可以运行;

点击“获取IP/MAC地址”按钮,本计算机的IP和MAC地址就会显示出来;

点击“复位”清空两个TextBox,来重新获取IP和MAC地址;

点击“退出”退出程序。

【总结】

经过几个星期的上机实践学习,使我对计算机网络编程方面的应用有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处。刚开始选定题目,在图书馆找了一些资料,通过自己的设想构思的出了主要的框架,想想这个程序不是很简单嘛。也就几个函数,但是直到亲自下手才感觉不像想象的那么容易,一下手就遇到很多棘手的问题,首先是以前的vb语言没学好,一些基本函数都不太清楚,导致不能很好的应用。再有操作时有很多很生疏的东西,虽然在学习课本知识的时感觉什么东西都很简单,但真正操作起来确实如此之难,语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,不仅仅是学习了网络编程的一些技巧,收获更大的是感觉自己对vb这门语言掌握了不少,一些函数如何定义啊、如何调用库函数啊等等都有了更深的了解。下学期就要做毕业设计了,想想,这次课程设计也会对下学期的课程设计起到一个打基础的作用。几个星期里,通过查找资料和在网上查询还是编出了自己比较满意的程序,但更重要的还是我们从中学到的一些设计思想和方法,而这些东西是只有在不断的实践中才可以学得到的。其实我们大学几年也做了不少的课程设计,目的就是要让我们提高理论与实际结合的能力,只有把所学的理论知识与实践相结合起来,从理论中得出结论,我们的实际动手能力和独立思考

的能力才会真正的提高提高。在设计的过程中,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了。在设计中遇到了很多编程问题,最后在同学们的帮助下和老师的指导下,还有通过自己翻阅资料,问题终于迎刃而解了。总的来说,只有我们多实践才能更加巩固自己学到的知识,提高自己的能力。

【程序源代码】

'winsock库的初始化

Private Const SOCKET_ERROR As Long = -1

Private Const MAX_WSADescription = 256

Private Const MAX_WSASYSStatus = 128

Private Const ERROR_SUCCESS As Long = 0

Private Const WS_VERSION_REQD As Long = &H101

Private Const MIN_SOCKETS_REQD As Long = 1

Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF& Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&

Private Type HOSTENT

hName As Long

hAliases As Long

hAddrType As Integer

hLen As Integer

hAddrList As Long

End Type

Private Type WSADATA

wVersion As Integer

wHighVersion As Integer

szDescription(0 To MAX_WSADescription) As Byte

szSystemStatus(0 To MAX_WSASYSStatus) As Byte

wMaxSockets As Integer

wMaxUDPDG As Integer

dwVendorInfo As Long

End Type

Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long

Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long

Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As

Long, lpWSADATA As WSADATA) As Long

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long

Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

'netbios的初始化

Private Const NCBASTAT = &H33

Private Const NCBNAMSZ = 16

Private Const HEAP_ZERO_MEMORY = &H8

Private Const HEAP_GENERATE_EXCEPTIONS = &H4

Private Const NCBRESET = &H32

Private Type NCB

ncb_command As Byte

ncb_retcode As Byte

ncb_lsn As Byte

ncb_num As Byte

ncb_buffer As Long

ncb_length As Integer

ncb_callname As String * NCBNAMSZ

ncb_name As String * NCBNAMSZ

ncb_rto As Byte

ncb_sto As Byte

ncb_post As Long

ncb_lana_num As Byte

ncb_cmd_cplt As Byte

ncb_reserve(9) As Byte

ncb_event As Long

End Type

Private Type ADAPTER_STATUS

adapter_address(5) As Byte

rev_major As Byte

reserved0 As Byte

adapter_type As Byte

rev_minor As Byte

duration As Integer

frmr_recv As Integer

frmr_xmit As Integer

iframe_recv_err As Integer

xmit_aborts As Integer

xmit_success As Long

recv_success As Long

iframe_xmit_err As Integer

recv_buff_unavail As Integer

t1_timeouts As Integer

ti_timeouts As Integer

Reserved1 As Long

free_ncbs As Integer

max_cfg_ncbs As Integer

max_ncbs As Integer

xmit_buf_unavail As Integer

max_dgram_size As Integer

pending_sess As Integer

max_cfg_sess As Integer

max_sess As Integer

max_sess_pkt_size As Integer

name_count As Integer

End Type

Private Type NAME_BUFFER

name As String * NCBNAMSZ

name_num As Integer

name_flags As Integer

End Type

Private Type ASTAT

adapt As ADAPTER_STATUS

NameBuff(30) As NAME_BUFFER

End Type

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte Private Declare Function GetProcessHeap Lib "kernel32" () As Long

Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long

Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long

‘获得IP地址的主函数

Private Function GetIPAddress() As String

Dim sHostName As String * 256

Dim lpHost As Long

Dim HOST As HOSTENT

Dim dwIPAddr As Long

Dim tmpIPAddr() As Byte

Dim i As Integer

Dim sIPAddr As String

Dim werr As Long

If Not SocketsInitialize() Then

GetIPAddress = ""

Exit Function

End If

sHostName = Trim(sHostName)

lpHost = gethostbyname(sHostName)

If lpHost = 0 Then

werr = WSAGetLastError()

GetIPAddress = ""

SocketsCleanup

Exit Function

End If

CopyMemory HOST, lpHost, Len(HOST)

CopyMemory dwIPAddr, HOST.hAddrList, 4

ReDim tmpIPAddr(1 To HOST.hLen)

CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen

For i = 1 To HOST.hLen

sIPAddr = sIPAddr & tmpIPAddr(i) & "."

Next

GetIPAddress = Mid(sIPAddr, 1, Len(sIPAddr) - 1) SocketsCleanup

End Function

‘获得MAC地址的主函数

Public Function GetMACAddress() As String

Dim tmp As String

Dim pASTAT As Long

Dim NCB As NCB

Dim AST As ASTAT

NCB.ncb_command = NCBRESET

Call Netbios(NCB)

NCB.ncb_callname = "* "

NCB.ncb_command = NCBASTAT

NCB.ncb_lana_num = 0

NCB.ncb_length = Len(AST)

pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _

Or HEAP_ZERO_MEMORY, NCB.ncb_length)

If pASTAT = 0 Then

Debug.Print "memory allocation failed!"

Exit Function

End If

NCB.ncb_buffer = pASTAT

Call Netbios(NCB)

CopyMemory AST, NCB.ncb_buffer, Len(AST)

tmp = Format(Hex(AST.adapt.adapter_address(0)), "00") & "-" & Format(Hex(AST.adapt.adapter_address(1)), "00") & "-" & Format(Hex(AST.adapt.adapter_address(2)), "00") & "-" & Format(Hex(AST.adapt.adapter_address(3)), "00") & "-" & Format(Hex(AST.adapt.adapter_address(4)), "00") & "-" & Format(Hex(AST.adapt.adapter_address(5)), "00")

HeapFree GetProcessHeap(), 0, pASTAT

GetMACAddress = tmp

End Function

Private Function SocketsInitialize(Optional sErr As String) As Boolean

Dim WSAD As WSADATA, sLoByte As String, sHiByte As String

If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then

sErr = "The 32-bit Windows Socket is not responding."

SocketsInitialize = False

Exit Function

End If

If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then

sErr = "This application requires a minimum of " & _

CStr(MIN_SOCKETS_REQD) & " supported sockets."

SocketsInitialize = False

Exit Function

End If

If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _

(LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _

HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then

sHiByte = CStr(HiByte(WSAD.wVersion))

sLoByte = CStr(LoByte(WSAD.wVersion))

sErr = "Sockets version " & sLoByte & "." & sHiByte & _

" is not supported by 32-bit Windows Sockets."

SocketsInitialize = False

Exit Function

End If

SocketsInitialize = True

End Function

Private Sub SocketsCleanup()

If WSACleanup() <> ERROR_SUCCESS Then

App.LogEvent "Socket error occurred in Cleanup.", vbLogEventTypeError End If

End Sub

Private Function HiByte(ByVal wParam As Integer)

HiByte = wParam \ &H1 And &HFF&

End Function

Private Function LoByte(ByVal wParam As Integer)

LoByte = wParam And &HFF&

End Function

Private Sub Command1_Click()

Text1.Text = GetIPAddress()

Text2.Text = GetMACAddress()

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Command3_Click()

Text1.Text = ""

Text2.Text = ""

End Sub

【参考文献】

[1]李迎春等 Visual Basic 6.0网络编程北京北京希望电子出版社2001

[2]朱从旭等 Visual Basic程序设计综合教程北京清华大学出版社2000

[3]周峰等. Visual Basic案例开发集锦北京电子工业出版社2000

android获取Mac地址和IP地址

android获取Mac地址和IP地址 获取Mac地址实际项目中测试了如下几种方法: (1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac 地址,这种方法也是网络上使用的最多的方法) //根据Wifi信息获取本地Mac public static String getLocalMacAddressFromWifiInfo(Context context){ WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress(); } (2)调用Linux的busybox,通过linux命令来获取 //根据busybox获取本地Mac public static String getLocalMacAddressFromBusybox(){ String result = ""; String Mac = ""; result = callCmd("busybox ifconfig","HWaddr"); //如果返回的result == null,则说明网络不可取 if(result==null){ return "网络出错,请检查网络"; } //对该行数据进行解析 //例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67 if(result.length()>0 && result.contains("HWaddr")==true){ Mac = result.substring(result.indexOf("HWaddr")+6, result.length()-1); Log.i("test","Mac:"+Mac+" Mac.length: "+Mac.length()); /*if(Mac.length()>1){ Mac = Mac.replaceAll(" ", "");

如何绑定自己的IP地址和Mac地址

如何绑定自己的IP地址和Mac地址,如何解除绑定 分享| 2006-07-06 16:16Iguo_1225|浏览92187 次 我说的是用自己的PC绑定,我记得只需要几条命令。 还有如何解除绑定。 因为班级里只有我一台计算机可以上网,网管在服务器上记录了我的MAC地址和IP地址,可是学生只要把自己的MAC地址改成和我的一样,他们就可以上网了。 我想把我的MAC绑定在网卡上,使别人无法使用。如何实现? 2006-07-20 19:07 提问者采纳 MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。I P地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一的。 MAC地址的作用 IP地址就如同一个职位,而MAC地址则好像是去应聘这个职位的人才,职位可以既可以让甲坐,也可以让乙坐,同样的道理一个节点的IP地址对于网卡是不做要求,基本上什么样的厂家都可以用,也就是说IP地址与MAC地址并不存在着绑定关系。本身有的计算机流动性就比较强,正如同人才可以给不同的单位干活的道理一样的,人才的流动性是比较强的。职位和人才的对应关系就有点像是IP地址与MAC地址的对应关系。比如,如果一个网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。当然MAC地址除了仅仅只有这个功能还是不够的,就拿人类社会与网络进行类比,通过类比,我们就可以发现其中的类浦?Γ??玫乩斫釳AC地址的作用。 无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。其实人类社会和网络也是类似的,试想在人际关系网络中,甲要捎个口信给丁,就会通过乙和丙中转一下,最后由丙转告给丁。在网络中,这个口信就好比是一个网络中的一个数据包。数据包在传送过程中会不断询问相邻节点的MAC地址,这个过程就好比是人类社会的口信传送过程。相信通过这两个例子,我们就可以进一步理解

通过客户端ip获取mac地址

public class MacUtils { /** * 通过ip获取mac地址 * @param ipAddress 客户端ip * @return mac地址 */ public static String getMACAddressByIp(String ipAddress) { String str = "", macAddress = ""; try { Process pp = Runtime.getRuntime().exec("arp -a " + ipAddress); InputStreamReader ir = new InputStreamReader(pp.getInputStream(), "gbk"); BufferedReader br = new BufferedReader(ir); while ((str = br.readLine()) != null) { if (str.indexOf(ipAddress) > 1) { str = str.trim(); macAddress = str.substring(str.indexOf(" "), str.length()); macAddress = macAddress.trim(); macAddress = macAddress.substring(0,17); break; } } pp.destroy(); br.close(); ir.close(); } catch (Exception ex) { return "Can't Get MAC Address!"; }

手动修改IP和MAC地址

这就给这部分被限制上网的朋友们提出了一个难题:被限制不能上网了?那还有没有办法再突破封锁继续上网呢?要再突破封锁也是可以实现的,这里我说一下IP与MAC地址绑定并被锁定限制上网的方法如何巧妙化解。 化解方法:手动修改IP和MAC地址。 既然IP与MAC地址绑定,修改MAC肯定也要修改IP。 一般MAC地址在网卡中是固定的,当然也有网络高手会想办法去修改自己的MAC地址。修改自己的MAC地址有两种方法,一种是硬件修改,另外一种是软件修改。硬件的方法就是直接对网卡进行操作,修改保存在网卡的EPROM 里面的MAC地址,通过网卡生产厂家提供的修改程序可以更改存储器里的地址。那么什么叫做EPROM呢?EPROM是电子学中一种存储器的专业术语,它是可擦写的,也就是说一张白纸你用钢笔写了一遍以后就不能再用橡皮擦去了,而EPROM这张白纸用铅笔写后可以再擦去,可以反复改变其中数据的存储器。当然软件修改的方法就相对来说要简单得多了,在Windows中,网卡的MAC保存在注册表中,实际使用也是从注册表中提取的,所以只要修改注册表就可以改变MAC。 Windows 2000/XP中的修改:同样打开注册表编辑器: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\4D36E 970-E325-11CE-BFC1-08002BE10318 中的0000,0001,0002中的DriverDesc,如果在0000找到,就在0000下面添加字符串变量,命名为“NetworkAddress”,值为要设置的MAC地址,例如:000102030405 完成上述操作后重启就好了。一般网卡发出的包的源MAC地址并不是网卡本身写上去的,而是应用程序提供的,只是在通常的实现中,应用程序先从网卡上得到MAC地址,每次发送的时候都用这个MAC作为源MAC而已,而注册表中的MAC地址是在Windows安装的时候从网卡中读入的,只要你的操作系统不重新安装应该没有问题. 另一种修改MAC的方法:打开本地连接的属性,在“常规”里面,有一个“配置”,然后点“高级”,选“network address”,选中“值”,在里面填写数据。这个数据你最好到开始-运行-cmd,输入IPCONFIG /ALL 察看,如:00-1D-7D-77-45-83,找到你的那个值,去掉-,修改最后1个数,填进去就行了。 修改IP地址的方法:开始-运行-cmd,输入IPCONFIG /ALL 察看,将里面的信息纪录下来,到本地连接的属性里面-Internet协议TCP/IP-属性,点使用下面IP地址,然后把你纪录的写进去就行了,但也要把如192.168.1.3,后面的改一位数字,比如改成192.168.1.4,网关就不要改了。

关于IP-MAC地址绑定设置

关于IP-MAC地址绑定的交换机设置 1.方案1——基于端口的MAC地址绑定 思科2950交换机为例,登录进入交换机,输入管理口令进入配置模式,敲入命令: Switch#config terminal #进入配置模式 Switch(config)# Interface fastethernet 0/1 #进入具体端口配置模式 Switch(config-if )#Switchport port-secruity #配置端口安全模式 Switch(config-if )switchport port-security mac-address MAC(主机的MAC地址) #配置该端口要绑定的主机的MAC地址 Switch(config-if )no switchport port-security mac-address MAC(主机的MAC地址) #删除绑定主机的MAC地址 注意: 以上命令设置交换机上某个端口绑定一个具体的MAC地址,这样只有这个主机可以使用网络,如果对该主机的网卡进行了更换或者其他PC机想通过这个端口使用网络都不可用,除非删除或修改该端口上绑定的MAC地址,才能正常使用。 注意: 以上功能适用于思科2950、3550、4500、6500系列交换机 2.方案2——基于MAC地址的扩展访问列表 Switch(config)Mac access-list extended MAC10 #定义一个MAC地址访问控制列表并且命名该列表名为MAC10 Switch(config)permit host 0009.6bc4.d4bf any #定义MAC地址为0009.6bc4.d4bf的主机可以访问任意主机 Switch(config)permit any host 0009.6bc4.d4bf #定义所有主机可以访问MAC地址为0009.6bc4.d4bf的主机 Switch(config-if )interface Fa0/20 #进入配置具体端口的模式 Switch(config-if )mac access-group MAC10 in #在该端口上应用名为MAC10的访问列表(即前面我们定义的访问策略) Switch(config)no mac access-list extended MAC10 #清除名为MAC10的访问列表 此功能与应用一大体相同,但它是基于端口做的MAC地址访问控制列表限制,可以限定特定源MAC地址与目的地址范围。 注意:

MAC地址与IP地址绑定策略的破解

MAC与IP 地址绑定原理 IP地址的修改非常容易,而MAC地址存储在网卡的EEPROM中,而且网卡的MAC 地址是唯一确定的。因此,为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP 地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP地址,也因MAC地址不匹配而盗用失败:而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。 目前,很多单位的内部网络,尤其是学校校园网都采用了MAC地址与IP地址的绑定技术。许多防火墙(硬件防火墙和软件防火墙)为了防止网络内部的IP地址被盗用,也都内置了MAC地址与IP地址的绑定功能。 从表面上看来,绑定MAC地址和IP地址可以防止内部IP地址被盗用,但实际上由于各层协议以及网卡驱动等实现技术,MAC地址与IP地址的绑定存在很大的缺陷,并不能真正防止内部IP地址被盗用。 破解MAC与IP地址绑定策略 2.1 IP地址和MAC地址简介 现行的TCP/IP网络是一个四层协议结构,从下往上依次为链路层、网络层、传输层和应用层。 Ethernet协议是链路层协议,使用的地址是MAC地址。MAC地址是Ethernet网卡在Ethernet中的硬件标志,网卡生产时将其存于网卡的EEPROM中。网卡的MAC地址各不相同,MAC地址可以唯一标志一块网卡。在Ethernet上传输的每个报文都含有发送该报文的网卡的MAC地址。 Ethernet根据Ethernet报文头中的源MAC地址和目的MAC来识别报文的发送端和接 收端。IP协议应用于网络层,使用的地址为IP地址。使用IP协议进行通讯,每个IP报文头中必须含有源IP和目的IP地址,用以标志该IP报文的发送端和接收端。在Ethernet上使用IP协议传输报文时,IP报文作为Ethernet报文的数据。IP地址对于Ethernet交换机或处理器是透明的。用户可以根据实际网络的需要为网卡配置一个或多个IP地址。MAC地址和IP地址之间并不存在一一对应的关系。 MAC地址存储在网卡的EEPROM中并且唯一确定,但网卡驱动在发送Ethernet报文时,并不从EEPROM中读取MAC地址,而是在内存中来建立一块缓存区,Ethernet报文从中读取源MAC地址。而且,用户可以通过操作系统修改实际发送的Ethernet报文中的源MAC 地址。既然MAC地址可以修改,那么MAC地址与IP地址的绑定也就失去了它原有的意义。 2.2 破解方案 下图是破解试验的结构示意图。其内部服务器和外部服务器都提供Web服务,防火墙中实现了MAC地址和IP地址的绑定。报文中的源MAC地址与1P地址对如果无法与防火墙中设置的MAC地址与1P地址对匹配,将无法通过防火墙。主机2和内部服务器都是内

获取局域网IP和MAC地址的方法

取得IP的方法很多,比如"局域网查看工具",我推荐用“局域网花名册”网上随便搜索一下就有了。 取得MAC地址的方法:WIN+R,输入CMD,用"NBTSTAT -A IP地址" 查看。不过,我试过好像这能查看自己的ip和mac,如下 C:\Documents and Settings\hike>nbtstat -A 211.69.244.171 本地连接: Node IpAddress: [211.69.244.171] Scope Id: [] NetBIOS Remote Machine Name Table Name Type Status --------------------------------------------- 9D15D457A66C432<00> UNIQUE Registered 9D15D457A66C432<20> UNIQUE Registered WORKGROUP <00> GROUP Registered MAC Address = 00-E0-4A-01-BE-9C 如果查看别人的会显示: C:\Documents and Settings\hike>nbtstat -A 211.69.244.188 本地连接: Node IpAddress: [211.69.244.171] Scope Id: [] Host not found. 取得自己电脑IP与MAC的方法:WIN+R,输入CMD,用"IPCONFIG /ALL" 查看,还有一个快速查看mac的命令:“getmac”,也挺方便的。 下面是我强烈推荐的查看别人ip和mac的命令: 先用ping,ping通每一台机器,然后用arp -a 可列出所有刚才ping通的机器的网卡号。

关于IP-MAC地址绑定的交换机设置(思科路由器配置)

关于IP-MAC地址绑定的交换机设置(思科路由器配置) 2009年10月27日星期二 15:35 2009-03-01 01:30 注:IP地址与MAC地址的关系: IP地址是根据现在的IPv4标准指定的,不受硬件限制比较容易记忆的地址,长度4个字节。而 MAC地址却是用网卡的物理地址,保存在网卡的EPROM里面,与硬件有关系,比较难于记忆,长度为6个字节。 虽然在TCP/IP网络中,计算机往往需要设置IP地址后才能通讯,然而,实际上计算机之间的通讯并不是通过IP地址,而是借助于网卡的MAC地址。IP地址只是被用于查询欲通讯的目的计算机的MAC地址。 ARP协议是用来向对方的计算机、网络设备通知自己IP对应的MAC地址的。在计算机的ARJ缓存中包含一个或多个表,用于存储IP地址及其经过解析的以太网MAC地址。一台计算机与另一台IP地址的计算机通讯后,在ARP缓存中会保留相应的MAC地址。所以,下次和同一个IP地址的计算机通讯,将不再查询MAC地址,而是直接引用缓存中的MAC地址。 在交换式网络中,交换机也维护一张MAC地址表,并根据MAC地址,将数据发送至目的计算机。(转载注明出处n et130) 为什么要绑定MAC与IP 地址:IP地址的修改非常容易,而MAC地址存储在网卡的EEPROM中,而且网卡的MAC地址是唯一确定的。因此,为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP地址,也因MAC 地址不匹配而盗用失败:而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。 目前,很多单位的内部网络,都采用了MAC地址与IP地址的绑定技术。下面我们就针对Cisco的交换机介绍一下IP和MAC绑定的设置方案。 在Cisco中有以下三种方案可供选择,方案1和方案2实现的功能是一样的,即在具体的交换机端口上绑定特定的主机的MAC地址(网卡硬件地址),方案3是在具体的交换机端口上同时绑定特定的主机的MAC地址(网卡硬件地址)和IP地址。 1.方案1——基于端口的MAC地址绑定 思科2950交换机为例,登录进入交换机,输入管理口令进入配置模式,敲入命令: Switch#config terminal #进入配置模式 Switch(config)# Interface fastethernet 0/1 #进入具体端口配置模式 Switch(config-if)#Switchport port-secruity #配置端口安全模式 Switch(config-if )switchport port-security mac-address MAC(主机的MAC 地址) #配置该端口要绑定的主机的MAC地址 Switch(config-if )no switchport port-security mac-address MAC(主机的MAC地址) #删除绑定主机的MAC地址

ip地址和mac地址

ip地址和mac地址 ip地址就是你的机器在网络上面的门牌号码,子网掩码的作用就是告诉网络你的机器是处在哪一个小的子网络中。网关是你的机器通过什么服务器来访问的网络。mac地址是网卡在出厂的时候,制造商给网卡赋予的唯一的一个地址标识ip地址就是你的机器在网络上面的门牌号码,子网掩码的作用就是告诉网络你的机器是处在哪一个小的子网络中。网关是你的机器通过什么服务器来访问的网络。mac地址是网卡在出厂的时候,制造商给网卡赋予的唯一的一个地址标识MAC地址 MAC地址1212 一,MAC(Media Access Control, 介质访问控制)MAC地址是烧录在Network Interface Card(网卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特长(6字节),16进制的数字组成.0-23位是由厂家自己分配.24-47位,叫做组织唯一标志符(oganizationally unique ,是识别LAN(局域网)节点的标识。其中第40位是组播地址标志位。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。 也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。比如,著名的以太网卡,其物理地址是48bit(比特位)的整数,如:44-45-53-54-00-00,以机器可读的方式存入主机接口中。以太网地址管理机构(IEEE)将以太网地址,也就是48比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。 形象的说,MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。 如何获取本机的MAC? 对于数量不多的几台机器,我们可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。 在Windows 2000/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址。 修改网卡MAC地址的方法 其实更改网卡MAC地址的功能不论98还是2000,都已经提供了,只是平时大家都没有注意到而以。下面我就说说怎么更改。很简单哦。。。 一,好了,现在先来看看WIN2000。在桌面上网上邻居图标上点右键,选"属性",在出来的"网络和拨号连接"窗口中一般有两个图标,一个是"新建连接"图标,一个是"我的连

修改ip地址和mac地址用命令

WinXP一键更改IP与MAC地址 前一阵子,因为寝室里要不断更换homeshare主机,改IP和MAC成了一项比较麻烦的工序,因此一直想手动编写一个一键更改IP与MAC的批处理文件,查看一些网上方法,发现并不好用。 如,用netsh interface ip命令,该命令介绍如下: ? -显示命令列表 add -向表中添加一个配置项目 delete -从表中删除一个配置项目 dump -显示一个配置脚本 help -显示命令列表 reset -复位tcp/ip 及相关的组件到到干净的状态 set -设置配置信息 show -显示信息 这里我们只用到set命令 如:netsh interface ip set address "本地连接" static 172.30.40.59 255.255.0.0 172.30.3.21 1 某些机器上名称不是本地连接,而是local address一类的,只要替换上述命令中相关内容即可,IP中三项分别对应IP、掩码、网关,最后的“1”是指默认网关的跃点数,一般为“1”。 这样更改IP工作完成。 注:(该方法仅针对固定IP类型,如非固定IP则将netsh一行用以下命令替换) 1.要将指定适配器的静态地址切换为DHCP 地址,键入以下命令:netsh interface ip set address"本地连接" dhcp 2.更改DNS为192.168.0.1:netsh interface ip set DNS "本地连接" static 192.168.0.1 缺点:该方法虽简单易懂,但执行起来速度并不快,需要看使用者电脑配置而定,其主要原因在于更改IP的命令netsh执行较慢。

华为路由器ipmac地址绑定保存配置

1、登录学校路由器:Telnet 学校公网地址(不知道自己的互联网出口地址的可以看一下电脑的网关地址),然后 回车 如:telnet 回车或者Telnet 电脑ip的网关 2、提示你输入路由的用户名和密码,在输入密码的时候是看不到输入的字符的,因为密码设置的为cipher模式。然后敲回车。 3、输入dis arp,查看arp缓存信息 这里记录者目前电脑通过自动获取的IP地址信息。老师们可以将其复制到excel表格里,但是最好能确定mac地址所对应的是哪一台电脑。 4、然后执行system命令,敲回车,进入全局模式会变成[twzx] 5、在全局模式下关闭DHCP ,执行命令undo dhcp enable 回车,下面所有设备将不能自动获取地址,如图 5、在全局模式下输入user-bind static ip-address mac-address xxxx-xxxx-xxxx 敲回车 如下图:对进行绑定(删除绑定在命令前面加入undo) 6、在全局模式下输入:dis dhcp static user-bind all 可查看绑定信息。如图 0001-0001-0001 mac地址的电脑使用。其他mac地址无法使用该IP地址。 8、还有一种方法:使用arp static ,这样也可以做绑定。绑定如图: 以上通过arp绑定的方法需要将局域网内的所有IP与mac进行,例如 一个局域网中有4台电脑,通过arp static绑定了4个电脑对应的ip与mac地址,但是这4台电脑还可以修改为没有做绑定的IP地址进行上网 2222-2222 (黎明) -3333-3333 (刘德华) -4444-4444 (周润发) -5555-5555 (梁朝伟)。 现在黎明的电脑进行了地址绑定,但是黎明可以手动将电脑的地址修改为 所以我们要将子网内的所有地址和mac地址进行绑定 -0000-0000 (这个mac地址一定要用一个假的不存在的地址) 0000-0000 (同样) ……………… 这样绑定以后上面4位明星的电脑只能用他们的地址。 如果现在局域网中又加入一台电脑,想要让他上网的话,假如给他一个地址1 那么需要将192.168.1.6 0000-0000-0000 这条删除,命令是undo。然后在执行arp static 192.168.1.6 mac地址 做完以后记得保存,在视图模式下, 后面输入system 回车后进入全局模【TWZX】, 保存要从全局模式退出,进入视图模式,命令是:【TWZX】quit 回车

wifi下获取ip和mac地址

2. [代码][Java]代码 01//所需的权限 02 03 04 05--------------------------------------------------------------------- 06//布局 07 14 18 19 23------------------------------------------------------------------------------- 24//正文 25p a c k a g e c o m.w i f i; 26 27i m p o r t j a v a.n e t.I n e t A d d r e s s; 28i m p o r t j a v a.n e t.N e t w o r k I n t e r f a c e; 29i m p o r t j a v a.n e t.S o c k e t E x c e p t i o n;

如何破解MAC地址与IP地址绑定策略

如何破解MAC地址与IP地址绑定策略 互联网 1 引言 对“IP地址盗用”的解决方案绝大多数都是采取MAC与IP地址绑定策略,这种做法是十分危险的,本文将就这个问题进行探讨。在这里需要声明的是,本文是处于对对MAC与IP地址绑定策略安全的忧虑,不带有任何黑客性质。 1.1 为什么要绑定MAC与IP 地址 影响网络安全的因素很多,IP地址盗用或地址欺骗就是其中一个常见且危害极大的因素。现实中,许多网络应用是基于IP的,比如流量统计、账号控制等都将 IP地址作为标志用户的一个重要的参数。如果有人盗用了合法地址并伪装成合法用户,网络上传输的数据就可能被破坏、窃听,甚至盗用,造成无法弥补的损失。 盗用外部网络的IP地址比较困难,因为路由器等网络互连设备一般都会设置通过各个端口的IP地址范围,不属于该IP地址范围的报文将无法通过这些互连设备。但如果盗用的是Ethernet内部合法用户的IP地址,这种网络互连设备显然无能为力了。“道高一尺,魔高一丈”,对于Ethernet内部的IP 地址被盗用,当然也有相应的解决办法。绑定MAC地址与IP地址就是防止内部IP盗用的一个常用的、简单的、有效的措施。 1.2 MAC与IP 地址绑定原理 IP地址的修改非常容易,而MAC地址存储在网卡的EEPROM中,而且网卡的MAC地址是唯一确定的。因此,为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP地址,也因MAC地址不匹配而盗用失败:而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。

查看修改和绑定MAC地址的详细方法与步骤

教你如何查看及修改和绑定MAC地址 给出方法来绑定你的IP和MAC地址防止别人盗用你的MAC地址,MAC地址就是物理地址。 XP系统下绑定 开始菜单——运行——输入CMD——再输入ipconfig /all 查看你的IP地址和MAC地址(物理地址),然后在输入arp -s ip mac就可以将IP绑定MAC地址了。如arp -s 10.5.118.145 00-25-B3-72-4B-D8,10.5.118.145是我的IP地址,00-25-B3-72-4B-D8是我的物理地址。如果要解除绑定就输入arp -d解除MAC地址绑定。 Windows7系统下绑定 win7系统的话arp绑定无效,勒个时候就要用其他方法: 使用 arp -a 命令查看网关的MAC网卡物理地址 使用 netsh i i show in命令查看本地连接的idx编号,我的是11的。 使用 netsh -c “i i” add neighbors 本地连接的idx “网关IP”“网关mac“命令绑定MAC地址 使用 arp -a 查看MAC绑定结果 最后绑定的结果是静态的。如果没有人盗用你的MAC地址最好就不要绑定了。

1.执行arp-s 命令即可绑定IP和MAC地址,但在Win7下运行arp -s 绑定mac时, 出现“ARP 项添加失败: 拒绝访问。”的提示,Win7下绑定IP和MAC地址操作和X P有所差别,在Win7中需要用netsh命令了来绑定Mac地址。 2.1、CMD中输入:netsh i i show in,找到“本地连接”对应的“Idx” (笔者的 是“11”,下面neighbors后面的数字跟这里一致。) 3.2、下面在CMD输入:netsh -c “i i” add neighbors 11 “网关IP” “Mac地 址“,这里11是idx号。 通过上面的命令就能绑定Mac地址,而在Win7上用arp -d并不能完全的删除绑定,必须使用netsh -c "i i" delete neighbors IDX(IDX改为相应的数字)才可删除M AC地址绑定。

Cisco中IP地址与MAC地址绑定总结

Cisco中IP地址与MAC地址绑定总结 IP地址与MAC地址的关系:IP地址是根据现在的IPv4标准指定的,不受硬件限制比较容易记忆的地址,长度4个字节。而MAC地址却是用网卡的物理地址,保存在网卡的EPROM里面,与硬件有关系,比较难于记忆,长度为6个字节。 虽然在TCP/IP网络中,计算机往往需要设置IP地址后才能通讯,然而,实际上计算机之间的通讯并不是通过IP地址,而是借助于网卡的MAC地址。IP地址只是被用于查询欲通讯的目的计算机的MAC地址。 ARP协议是用来向对方的计算机、网络设备通知自己IP对应的MAC地址的。在计算机的ARJ 缓存中包含一个或多个表,用于存储IP地址及其经过解析的以太网MAC地址。一台计算机与另一台IP地址的计算机通讯后,在ARP缓存中会保留相应的MAC地址。所以,下次和同一个IP地址的计算机通讯,将不再查询MAC地址,而是直接引用缓存中的MAC地址。 在交换式网络中,交换机也维护一张MAC地址表,并根据MAC地址,将数据发送至目的计算机。 为什么要绑定MAC与IP 地址:IP地址的修改非常容易,而MAC地址存储在网卡的EEPROM 中,而且网卡的MAC地址是唯一确定的。因此,为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP地址,也因MAC地址不匹配而盗用失败:而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。 目前,很多单位的内部网络,都采用了MAC地址与IP地址的绑定技术。下面我们就针对Cisco 的交换机介绍一下IP和MAC绑定的设置方案。 在Cisco中有以下三种方案可供选择,方案1和方案2实现的功能是一样的,即在具体的交换机端口上绑定特定的主机的MAC地址(网卡硬件地址),方案3是在具体的交换机端口上同时绑定特定的主机的MAC地址(网卡硬件地址)和IP地址。 1.方案1——基于端口的MAC地址绑定 思科2950交换机为例,登录进入交换机,输入管理口令进入配置模式,敲入命令: Switch#config terminal #进入配置模式 Switch(config)# Interface fastethernet 0/1 #进入具体端口配置模式 Switch(config-if)#Switchport port-secruity #配置端口安全模式 Switch(config-if )switchport port-security mac-address MAC(主机的MAC地址)

获取MAC地址和IP地址的程序设计

获取MAC地址和IP地址的程序设计 通信0402班学号:0905040225 姓名:张玉海指导老师: 王国才 【设计目标】 通过设计程序能获取本计算机的MAC地址和IP地址并显示。 【设计原理和方法】 本程序设计包含两个部分:一、获取本机IP地址;二、获取本机MAC地址。我是通过VB编程实现的。 其中,为了获取本机的IP地址,要使用WinSock库,WinSock API是Microsoft Windows 的网络程序接口。应用程序在使用WinSock API之前,必须调用WSAstartup函数,只有调用函数成功返回(表示应用程序与WinSock库成功的简历其连接),应用程序才可以调用其他Windows Socketers .DLL中的函数。当程序将要结束时,又必须调用WSACleanup函数可以结束Windows Socketers .DLL的使用。WinSock规范定义了几个数据库的例程。其中我们要用到gethostname和gethostbyname两个函数来得到IP地址。gethostname可以获得主机名, gethostbyname函数能够从主机名得到对应的“主机”(由名字和地址标识),函数唯一的参数name就是前面调用gethostname函数得到的主机名,二返回值是一个hostent结构,他可以标识一个“主机”列表,hostent的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址,hAddrList是一个列表,通过它就可以得到所有的IP地址。 MAC地址也叫物理地址、硬件地址或链路地址,此程序设计的获取MAC地址是通过NetBIOS编程实现的。其中,要用到网络编程接口中的一个重要的概念,那就是LANA编号(LAN适配器编号,LANadaprer),每张物理网卡都会分配一个独一无二的LANA编号。要想调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在Visual Basic中可以这样引入: Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte 函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。NetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知其的MAC地址的一条可行路径。其中在网络适配器状态命令的ADAPTER_STA TUS结构中我们最为关心的就是adapter_address字段,它标识的就是网卡的MAC地址。

C语言获取IP和MAC码

首先看从C语音的几种方法比较起,看看如下,结果是获取IP和MAC码 C#遍历局域网的几种方法及比较 扫描局域网IP列表的几种方法 很多软件都有获知局域网在线计算机IP的功能,但是在.net怎么实现呢,有好多方法, 下面我给大家介绍几种,供大家参考。 1、微软社区上介绍了使用Active Directory 来遍历局域网 利用DirectoryEntry组件来查看网络 网址:https://www.sodocs.net/doc/5016891080.html,/china/communITy/program/originalarticles/techdoc/DirectoryEntry.mspx private void EnumComputers() { using(DirectoryEntry root = new DirectoryEntry("WinNT:")) { foreach(DirectoryEntry domain in root.Children) { Console.WriteLine("Domain | WorkGroup: "+https://www.sodocs.net/doc/5016891080.html,); foreach(DirectoryEntry computer in domain.Children) { Console.WriteLine("Computer: "+https://www.sodocs.net/doc/5016891080.html,); } } } } 效果评价:速度慢,效率低,还有一个无效结果 Computer: Schema 使用的过程中注意虑掉。 2、利用Dns.GetHostByAddress和IPHostEntry遍历局域网 private void EnumComputers() { for (int i = 1; i <= 255; i++) { string scanIP = "192.168.0." + i.ToString(); IPAddress myScanIP = IPAddress.Parse(scanIP); IPHostEntry myScanHost = null; try

MAC地址 IP地址 端口 关系 概念

目录 MAC地址(MAC Address) (1) MAC地址与IP地址区别 (5) 理解IP和端口 (12) MAC地址(MAC Address) MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的标识符”(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。一个地址块可以生成224个不同的地址。MAC地址实际上就是适配器地址或适配器标识符EUI-48。[1] 2解释编辑 MAC(Media Access Control,介质访问控制)地址,也叫硬件地址,长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位: ?前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区 分了不同的厂家。 ?后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。

MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。 其中第1字节的第8Bit(如图中00-50-BA-...对应的0000000-01010000-10111010-...,加粗字体的Bit)标识这个地址是组播地址还是单播地址。这是由以太网的传输协议高字节先传,但每一字节内低位先传的特性所决定的,见IEEE 802.3 3.2.3 Address fields:“The first bit (LSB) shall be used in the Destination Address field as an address type designation bit to identify the Destination Address either as an individual or as a group address. If this bit is 0, it shall indicate that the address field contains an individual address. If this bit is 1, it shall indicate that the address field contains a group address that identifies none, one or more, or all of the stations connected to the LAN. In the Source Address field, the first bit is reserved and set to 0.”。事实上这传输的顺序为000000000000101001011101...“The first bit (LSB)”即是前言的第8Bit。 网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。 也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主

相关主题