本文包含以下两部分:
- ## C语言编程获取本机的mac地址
- ## mac下pcap编程报错Undefined symbols for architecture x86_64:”__pcap_*****”, referenced from: _main in…的解决方法
关键词:计算机网络; pcap; libpcap; mac; mac地址;
本学期计网lab老师要求我实现用C语言获取本机的mac地址。但像我这么懒的人眼珠一转就想直接调shell,但问过了老师,直接调shell的命令不行,也就意味着system(“ipconfig”)这样的代码不允许出现。不让用就算了吧,那就自己搞。当然,老师明确说了不会就问度娘,那我就问问。。。
上网查了一下,网上相关的实现有很多,比如有调用API的、通过访问网卡获取的,等等。但我这么懒,肯定不想访问网卡什么的(其实也挺容易的),那么应该怎么办呢?
受到ping命令的启发,我的想法是通过一次网络连接请求,获取本机mac地址。在构思结束后我上网查相关资料,才发现我的想法对应的是一个叫ARP协议的东西。好高兴自己居然独立想出来了一个高级的东西~(并不,只是你的思路别人已经造好了轮子而已。。)
ARP的C语言实现网络上有:传送门,但这个太长,我感觉很多功能并不需要。
我利用ARP协议获取本机的mac地址的思路是:模拟接收到一个数据包,并且发送数据包回应(此部分类似ping命令),然后捕获我们回应的数据包进行解析,得到本机的mac地址并不是完全基于ARP,更正为抓取ping命令发送的ICMP包
既然是捕获数据包,那就要用到我们”大名鼎鼎“的数据包捕获函数库PCAP了。
要使用PCAP可能你需要在自己的电脑上安装libpcap这个函数库(是叫函数库嘛?问号脸。。。。)
mac我并没有安装libpcap,好像是自带pcap库了?(便利性赞一个)。其他系统要安装可以百度一下。
好了废话不多说,直接上代码:
/**************************myMacAddress.c*************************************
* Copyright (C) 2017 by guoayng (Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)*
* 实现了C语言获取本机的mac地址
* 备注:
* 网上相关的实现有很多,比如有调用API的、通过访问网卡获取的,等等。并且问过了老师,直接调shell的命令不行,也就意味着system(“ipconfig”)这样的代码不允许出现
* 但我不想访问网卡什么的,那么应该怎么办呢?
* 受到ping命令的启发,我的想法是通过一次网络连接请求,获取本机mac地址
* 在构思结束后我上网查相关资料,才发现我的想法对应的是一个叫ARP协议的东西
* ARP的C语言实现网络上有:http://bl