Qt/C++ : How to get remote PC (communication peer) MAC address?

标签 qt sockets tcp mac-address peer

我在 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/

相关文章:

c++ - QPixmap 绘制性能问题

qt - qnetworkaccessmanager QNetworkReply - 竞争条件?

c# - 通过网络发送自定义结构 - SerializationException

java - 简单的 TCP 连接程序,我在看什么,如何修复它?

c++ - 将类方法传递给 const char * 参数

c - 为什么我的 C 套接字服务器没有接收数据

c# - 适用于 Windows 和 Linux 的同一台机器上的套接字

java - 如何处理通过套接字连接发送多条消息?

python - 如何在 Twisted 中将 TCP Keepalive 与端点一起使用?

c++ - qwt plot曲线轴不可见