为什么串口没有MAC地址,靠什么通信

为什么串口没有MAC地址,靠什么通信,第1张

以太网中使用ping命令测试互通性时才会出现!!!!,这是因为一开始没有对方的mac地址,需要使用arp协议进行解析,这样就会导致超时,所以会有个点。

在以太网内通信时需要ARP协议,由目标IP地址解析出目标MAC地址,才能封装以太网帧并发送出去。简单说就是ARP协议是为以太网服务的,也就是只针对LAN。

而串口是属于广域网的接口,广域网有它自己的数据链路层协议,如PPP、HDLC等,是不遵循以太网标准的,使用PPP数据帧、HDLC数据帧等通信,所以用不到以太网帧,也就用不到MAC地址和ARP协议。

MAC地址是由IEEE(国际电气与电子工程师协议)统一管理的,该组织为每个生产以太网设备的厂商分配组织机构标识符(OUI)。

最后总结一下,MAC地址和ARP协议是跟以太网,也就是局域网相关的,而串口是属于广域网的。局域网和广域网的技术是完全不同的。

分类: 电脑/网络 >> 互联网

解析:

MAC地址

MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。比如,著名的以太网卡,其物理地址是48bit(比特位)的整数,如:44-45-53-54-00-00,以机器可读的方式存入主机接口中。以太网地址管理机构(IEEE)将以太网地址,也就是48比特的不同组合,分为若干独立的连续地址组,生产以太网网卡的厂家就购买其中一组,具体生产时,逐个将唯一地址赋予以太网卡。

形象的说,MAC地址就如同我们身份z上的身份z号码,具有全球唯一性。

如何获取本机的MAC?

对于数量不多的几台机器,我们可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。

在Windows 2000/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址。

先跟你说一个比较简单比较常用的方法吧,基本用这个方法就可以了,建议你先把进入无线路由设置的网站的密码(和用户名)先改掉

WEP加密

1、启用WEP加密。

打开路由器管理界面,“无线设置”->“基本设置”:

“安全认证类型”选择“自动选择”,因为“自动选择”就是在“开放系统”和“共享密钥”之中自动协商一种,而这两种的认证方法的安全性没有什么区别。

“密钥格式选择”选择“16进制”,还有可选的是“ASCII码”,这里的设置对安全性没有任何影响,因为设置“单独密钥”的时候需要“16进制”,所以这里推荐使用“16进制”。

“密钥选择”必须填入“密钥2”的位置,这里一定要这样设置,因为新的升级程序下,密钥1必须为空,目的是为了配合单独密钥的使用(单独密钥会在下面的MAC地址过滤中介绍),不这样设置的话可能会连接不上。密钥类型选择64/128/152位,选择了对应的位数以后“密钥类型”的长度会变更,本例中我们填入了26位参数11111111111111111111111111 。因为“密钥格式选择”为“16进制”,所以“密钥内容”可以填入字符是0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f,设置完记得保存。

如果不需要使用“单独密钥”功能,网卡只需要简单配置成加密模式,密钥格式,密钥内容要和路由器一样,密钥设置也要设置为“WEP密钥2”的位置(和路由器对应),这时候就可以连接上路由器了。

如果你比较有兴趣学习的话,还可以继续往下看

无线路由器加密有以下几种方法:

1使用无线路由器提供的WEP,WPA等加密方式WEP一般设置简单

2或者使用访问限制,同过MAC地址来限制连接,就是说在访问限制列表里输入MAC的机器,才能连接到你的无线路由器

3一种更简单的,就是关闭SSID广播,就是无法搜索到你AP的SSID,你只能手工的方式自己填入正确的SSID,才能连接!上述三个方法都可以,但安全性质最好的是通过MAC地址限制访问设置都是在无线路由器完成

下面将对这些加密方式详细介绍下:

一、先介绍下最简单的,关闭SSID广播,这样无线用户就搜索不到你的网络标识,可以起到限制其他用户的连接具体设置:

a、路由器方设置,在关闭SSID广播时,你最好改变下SSID广播号,如果不改动的话,以前连过你网络的用户,还可以连接;

b、客户机设置:无线网络---属性----无线配置---"使用windows配置您的无线网络"--然后点"添加"--写上你设置的SSID名称OK后,---再点属性,要确认"自动连接到非手选网络"的勾未打上,确定就可以----让你刚刚设置的SSID号排在最上方,因为SSID广播关闭后,是你的电脑无线网卡去搜寻路由器,在最上方,可以首先访问你的无线网络,且避免连接到其他的无线网络(备注:如果这样还是上不去网的话,你可以点开无线网络的TCP/IP设置,写上内网的固定 ip,网关,DNS一般网关,DNS都是你路由器的ip)

二、MAC地址限制

2、单独密钥的使用。

这里的MAC地址过滤可以指定某些MAC地址可以访问本无线网络而其他的不可以,“单独密钥”功能可以为单个MAC指定一个单独的密钥,这个密钥就只有带这个MAC地址的网卡可以用,其他网卡不能用,增加了一定的安全性。

打开“无线设置”->“MAC地址过滤”,在“MAC地址过滤”页面“添加新条目”,如下界面是填入参数的界面:

“MAC地址”参数我们填入的是本例中TL-WN620G的MAC地址00-0A-EB-88-65-06 ,

“类型”可以选择“允许”/“禁止”/“64位密钥”/“128位密钥”/“152位密钥” ,本例中选择了64位密钥。“允许”和“禁止”只是简单允许或禁止某一个MAC地址的通过,这和之前的MAC地址功能是一样的,这里不作为重点。

“密钥”填入了10位AAAAAAAAAA ,这里没有“密钥格式选择”,只支持“16进制”的输入。

“状态”选择生效。

最后点击保存即可,保存后会返回上一级界面:

注意到上面的“MAC地址过滤功能”的状态是“已开启”,如果是“已关闭”,右边的按钮会变成“开启过滤”,点击这个按钮来开启这一功能。至此,无线路由器这一端配置完成!

顺便说一下怎样获取网卡MAC地址可以参考我司网站“网络教室” 文档《路由器配置指南》相关内容,通过电脑DOS界面运行ipconfig/all这个命令会d出如下类似信息,红线勾勒部分“Physical Address”对应的就是处于连接状态的网卡的MAC地址;

二、网卡TL-WN620G的配置

打开TL-WN620G客户端应用程序主界面--“用户文件管理”->“修改”,会d出用户配置文件管理对话框。首先是“常规”页填入和无线路由器端相同的SSID -- 本例为“TP-LINK”

然后点击“高级”页,红线勾勒部分注意选择认证模式,可以保持和无线路由器端相同,由于我们的路由器上选择了“自动选择”模式,所以这里无论选择什么模式都是可以连接的。

如果这个选项是灰色,就请先配置“安全”页面的参数,回过头再来这里配置;

接下来我们进入“安全”页

先选择“预共享密钥(静态WEP)”,然后点击“配置…”按钮,进入设置共享密钥的界面:

上面用红线勾勒的参数说明一下:

1)、“密钥格式”必须选择“十六进制(0-9,A-F);

2)、总共需要填入两个密钥,密钥1对应的是路由器 “无线配置”->“MAC地址过滤”页面下设置的单独密钥,本例为64位长度的密钥AAAAAAAAAA ;密钥2对应的是路由器“无线配置”->“基本设置”页面下设置的公共密钥,本例为128位长度的密钥:11111111111111111111111111 。

3)、最后要选中“WEP密钥1”。(注意“WEP密钥1”后面的圆点)

4)、单独密钥和公共密钥的位置是不能更改的。

配置完成,连续点击两次“取定”回到客户端应用程序主界面,我们可以看到网卡和无线路由器已经建立了连接,如下图所示:

这时候我们进入路由器“无线设置”-“主机状态”,可以看到已连接的网卡MAC地址;在“主机状态”页面,表里第一个显示的是无线路由器的MAC地址;

1、点击开始找到控制面板。

2、选择网络和共享中心。

3、选择更改适配器设置。

4、选择需要查看的网卡。

5、右键选择属性,选择配置。

6、选择高级。

7、选择网络地址。如图,右边的框内值即为本网卡的MAC地址。

1NDIS(DDK)通过驱动程序获取MAC地址

ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口

参数如下:

OID_802_3_PERMANENT_ADDRESS :物理地址

OID_802_3_CURRENT_ADDRESS :mac地址

于是我们的方法就得到了。

首先,看看注册表,找一找网卡有几块,分别是什么设备名。

具体位置和os有关,2000下在hlm/software/microsoft/windows nt/current version/networkcards。

然后createfile(devicename,)注意,要用linkname,因此

还要加上"//////device//"

接着

deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STATS,

OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS)

具体的情况可以参看ddk下的

OID_802_3_CURRENT_ADDRESS条目

2NetAPI-2得到MAC (MSDN推荐方法)

#include <windowsh>

//#include <winconh>

#include <stdlibh>

#include <stdioh>

#include <timeh>

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff [30];

}ASTAT, PASTAT;

ASTAT Adapter;

int main (void)

{

NCB Ncb;

UCHAR uRetCode;

char NetName[50];

LANA_ENUM lenum;

int i;

memset( &Ncb, 0, sizeof(Ncb) );

Ncbncb_command = NCBENUM;

Ncbncb_buffer = (UCHAR )&lenum;

Ncbncb_length = sizeof(lenum);

uRetCode = Netbios( &Ncb );

printf( "The NCBENUM return code is: 0x%x /n", uRetCode );

for(i=0; i < lenumlength ;i++)

{

memset( &Ncb, 0, sizeof(Ncb) );

Ncbncb_command = NCBRESET;

Ncbncb_lana_num = lenumlana;

uRetCode = Netbios( &Ncb );

printf( "The NCBRESET on LANA %d return code is: 0x%x /n",

lenumlana, uRetCode );

memset( &Ncb, 0, sizeof (Ncb) );

Ncbncb_command = NCBASTAT;

Ncbncb_lana_num = lenumlana;

strcpy( Ncbncb_callname, " " );

Ncbncb_buffer = (char ) &Adapter;

Ncbncb_length = sizeof(Adapter);

uRetCode = Netbios( &Ncb );

printf( "The NCBASTAT on LANA %d return code is: 0x%x /n",

lenumlana, uRetCode );

if ( uRetCode == 0 )

{

printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x/n",

lenumlana,

Adapteradaptadapter_address[0],

Adapteradaptadapter_address[1],

Adapteradaptadapter_address[2],

Adapteradaptadapter_address[3],

Adapteradaptadapter_address[4],

Adapteradaptadapter_address[5] );

}

}

}

3用COM API获取网卡MAC地址

这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。

GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他东西)计算得来的,表面上MAC地址就包含在其中。

我说表面上是因为事实上并没有包含。我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址,但

有时候您只会得到随机的十六进制数值。下面的例子十分简单,无需多讲。我们使用CoCreateGuid创建GUID,并将最后六个字节

放入字符串中。它们可能是MAC地址,但并不是必然的。

uuidcpp

#include <windowsh>

#include <iostream>

#include <conioh>

using namespace std;

int main()

{

cout << "MAC address is: ";

// 向COM要求一个UUID。如果机器中有以太网卡,

// UUID最后的六个字节(Data4的2-7字节)应该是本地以太网卡的MAC地址。

GUID uuid;

CoCreateGuid(&uuid);

// Spit the address out

char mac_addr[18];

sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",

uuidData4[2],uuidData4[3],uuidData4[4],

uuidData4[5],uuidData4[6],uuidData4[7]);

cout << mac_addr << endl;

getch();

return 0;

}

4用NetAPI来获取网卡MAC地址

首先在头文件定义中加入#include "nb30h"

#pragma comment(lib,"netapi32lib")

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff[30];

} ASTAT, PASTAT;

就可以这样调用来获取远程网卡MAC地址了:

CString GetMacAddress(CString sNetBiosName)

{

ASTAT Adapter;

NCB ncb;

UCHAR uRetCode;

memset(&ncb, 0, sizeof(ncb));

ncbncb_command = NCBRESET;

ncbncb_lana_num = 0;

uRetCode = Netbios(&ncb);

memset(&ncb, 0, sizeof(ncb));

ncbncb_command = NCBASTAT;

ncbncb_lana_num = 0;

sNetBiosNameMakeUpper();

FillMemory(ncbncb_callname, NCBNAMSZ - 1, 0x20);

strcpy((char )ncbncb_callname, (LPCTSTR) sNetBiosName);

ncbncb_callname[sNetBiosNameGetLength()] = 0x20;

ncbncb_callname[NCBNAMSZ] = 0x0;

ncbncb_buffer = (unsigned char ) &Adapter;

ncbncb_length = sizeof(Adapter);

uRetCode = Netbios(&ncb);

CString sMacAddress;

if (uRetCode == 0)

{

sMacAddressFormat(_T("%02x%02x%02x%02x%02x%02x"),

Adapteradaptadapter_address[0],

Adapteradaptadapter_address[1],

Adapteradaptadapter_address[2],

Adapteradaptadapter_address[3],

Adapteradaptadapter_address[4],

Adapteradaptadapter_address[5]);

}

return sMacAddress;

}

以上就是关于为什么串口没有MAC地址,靠什么通信全部的内容,包括:为什么串口没有MAC地址,靠什么通信、MAC地址是什么怎么才可以知道自己的MAC地址是什么、如何用串口来修改路由器的MAC等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9269682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存