ppgjx 发表于 2023-1-24 13:44

7层模型的链路层可以拿到对方的mac地址吗?

7层模型的链路层可以拿到对方的mac地址吗?按照我得理解是可以拿到得,但是http开发比如java好像没有办法拿到mac地址只能拿到ip

hhh1245 发表于 2023-1-24 15:01

不可能拿到!
终端MAC地址只存在于数据链路层,在现代TCP/IP网络模型下,IPV4匮乏,没有可能每个host都能使用IPV4公网IP进行通讯。
你拿到的IP还是ISP机房的公网IP,还要突破层层转发,找到具体终端,显然不太可能。

finky 发表于 2023-1-24 15:50

抓包啊,wireshark抓一下包就知道了

lcg2014 发表于 2023-1-24 18:25

1.能拿到,任何tcp/ip都必经物理层的MAC
2.java可能不行,需要专门的协议解析工具

xiangdong 发表于 2023-1-24 18:28

hhh1245 发表于 2023-1-24 15:01
不可能拿到!
终端MAC地址只存在于数据链路层,在现代TCP/IP网络模型下,IPV4匮乏,没有可能每个host都能 ...

TCP/IP协议,二层转发,源MAC\目的MAC均改变
三层转发,源IP\目的IP不变
PAT\PNAT,源IP改变,目的IP不变

如2楼所说,C端直连ISP,再从ISP层层追朔转发表

zdmboot 发表于 2023-1-24 19:54

知道了设备IP,java就肯定是可以拿到设备的MAC地址,我之前是搞网络的,才学的java是小白,不知道怎么写这个代码,
可以提供一个通过IP,获取MAC地址的思路,我的做法是:
1、先在cmd窗口中,ping设备的ip,这样arp列表中就有了ip与mac地址的对应表;
2、能守arp -a 命令,就可以列出本机所有ip地址,对应的mac地址了;
如果能使用java编程进行以上两个步骤的操作,那就能通过设备IP,拿到设备的MAC地址了......

yu211314 发表于 2023-1-24 20:56

zdmboot 发表于 2023-1-24 19:54
知道了设备IP,java就肯定是可以拿到设备的MAC地址,我之前是搞网络的,才学的java是小白,不知道怎么写这 ...

拿到的mac只能是同网段的mac或者互联mac,因为ip网络的原因,源目mac每经过一个网络都会发生改变,只有ip地址源目不发生改变(除去nat,若经过nat源ip发生改变,目的ip不变)

歌颂大海 发表于 2023-1-24 21:04

链路层(Link Layer)主要负责在网络的物理层之间传递数据。在这一层中可以获取到网络设备的MAC地址。

如果你想要获取对方设备的MAC地址,可以使用arp协议(Address Resolution Protocol)。ARP协议可以将IP地址映射到物理地址(MAC地址)。但是,这只能在局域网中有效,并且需要设备在线.

在 Node.js 中可以使用第三方库来获取网络设备的 MAC 地址。其中之一是 "arpjs" 库。

const arp = require('arpjs');

arp.getMAC('192.168.1.1', (err, mac) => {
if (err) {
    console.log(err);
} else {
    console.log(mac);
}
});

zdmboot 发表于 2023-1-25 02:56

yu211314 发表于 2023-1-24 20:56
拿到的mac只能是同网段的mac或者互联mac,因为ip网络的原因,源目mac每经过一个网络都会发生改变,只有ip ...

与不同网段的设备通讯,就是拿路由器,或网关的MAC地址,就可以了......

hhh1245 发表于 2023-2-8 19:12

xiangdong 发表于 2023-1-24 18:28
TCP/IP协议,二层转发,源MAC\目的MAC均改变
三层转发,源IP\目的IP不变
PAT\PNAT,源IP改变,目的IP不 ...

TCP在传输层
目的IP在传输层就变了。
终端(内网)→本地网关(内网)→社区机房(大内网)→ISP(公网)→ISP(公网)→社区机房(大内网)→对端本地网关(内网)→对端终端(内网)
这是最简单的连接方式,暴露在公网的只有ISP机房的IP和MAC地址,每一个过程,至少要执行到三层,单就机房核心交换机的转发表,都无可能拿到。
每一个阶段IP地址都在改变。
单从网络层面,无法拿到对端终端MAC地址。
使用黑客技术,写个入侵程序,倒是有可能。
页: [1] 2
查看完整版本: 7层模型的链路层可以拿到对方的mac地址吗?