我在 Windows 7 上使用 Qt5。
在我的应用程序(TCP 服务器)中,我目前正在使用 QTcpSocket 类中的一些方法:
- QAbstractSocket::peerAddress()
以获取对等地址;
- QAbstractSocket::peerPort()
以获得对等端口。
我还想获取通信对端的MAC地址。
这是否可能,而不使用自定义协议(protocol)(即无需在我的应用程序和对等方之间交换一些自定义消息)?如果是,如何?
后期编辑:现在有a very good solution - 我几个月前实现的。我同时测试了它,它 100% 完美地工作。享受:)
最佳答案
下面是获取通信对端MAC地址的代码。
在幕后,它使用 Windows 命令 arp .
使用 Qt5.8,在 Windows 7 上测试:
QString getMacForIP(QString ipAddress)
{
QString MAC;
QProcess process;
//
process.start(QString("arp -a %1").arg(ipAddress));
if(process.waitForFinished())
{
QString result = process.readAll();
QStringList list = result.split(QRegularExpression("\\s+"));
if(list.contains(ipAddress))
MAC = list.at(list.indexOf(ipAddress) + 1);
}
//
return MAC;
}
备注:远程端必须在同一个局域网内。
另一个注意事项:如果 IP 地址不存在,您将得到一个空的 MAC 字符串。
关于Qt/C++ : How to get remote PC (communication peer) MAC address?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247617/