C/C++ Linux,如何在不使用 IP 的情况下在网络上查找邻居(仅限 MAC)

     2023-02-17     44

关键词:

【中文标题】C/C++ Linux,如何在不使用 IP 的情况下在网络上查找邻居(仅限 MAC)【英文标题】:C/C++ Linux, How to find neighbors on a network Without Using IP (MAC Only) 【发布时间】:2014-01-13 16:35:22 【问题描述】:

在一个小型网络中,比如说 20 个节点或更少,我的程序在测试仪器上需要知道“谁在外面?”通过 MAC 而不是 IP。我将插入随机网络,并且需要能够做到这一点,而不必知道网络中的任何地址、MAC 或其他地址,并且知道我不能依赖 DHCP。 DHCP 服务器可能已关闭并且节点没有 IP 地址和/或我无法获得 IP 地址是完全合理的。说实话,我不需要IP,我们的测试协议是MAC层,不是IP。

那么,如何确定我的仪器邻居的 MAC 地址?这听起来很像 LLDP,但倒过来了,即“谁在外面”,而不是“我在这里,我可以做到……”。我必须假设没有分配给端点的 IP,所以没有 ARPing、没有 NMAP 等。

注意我要补充一下,这是有线网络。

【问题讨论】:

打开wireshark,抓包,查看所有源和目的mac地址。在C++中,以混杂模式打开网络接口,捕获所有数据包,并解析得到源和目标mac地址 还有网络拓扑? @Vardhan 可能只有一个其他节点(实际上很可能是这种情况)。我发送什么(广播?让其他 MAC 说出我可以捕获的内容?或者是否有一些 MAC 协议规定所有 MAC 时不时会说“你好”? 有广播 ping 等 .. 但有些操作系统可能会选择不响应广播 .. 因为这是一个安全问题.. 这里已经回答了这个问题:serverfault.com/questions/245136/… 【参考方案1】:

在一般情况下,没有 MAC 级别的协议可供您发送并保证网络上每台机器的响应(我假设您在这里使用以太网,因为我相信 WLAN 上的情况有所不同)。 IE 在 MAC 层没有广播(甚至是 IIRC 单播),主机可以保证响应。将 IP 放在上面,您可以进行 IP 广播并检查 ARP 缓存。

(在我看来)最好的方法是使用交换机/学习网桥在以太网上的工作方式,即在混杂模式下被动地监听数据包并记下它们的 MAC 地址。您不会发现完全静默的主机,但在它发送数据包之前也不会发现交换机。根据定义,无论如何都无法发现完全沉默的主机。

【讨论】:

+1 如果不幸的话,那真是天赐良机。你知道我可以复制并编译到测试仪器中的数据包嗅探器吗?在我的开发设置中,使用 wearshark 有点困难。太多的 MS Windows 和太多的虚拟机。 当然。使用 libpcap。如果这是一个好的答案,也许你想接受它:-) 我很擅长接受答案。我通常会等到第二天,这样我就可以给“夜间工作人员”一个回答的机会。

如何在不使用 C++/C 中的阻塞函数的情况下将值从线程返回到主函数

】如何在不使用C++/C中的阻塞函数的情况下将值从线程返回到主函数【英文标题】:HowtoreturnvaluefromthethreadbacktomainfunctionwithoutusingblockingfunctioninC++/C【发布时间】:2012-12-0212:09:28【问题描述】:我正在制作一个路由协议,我需要为... 查看详情

如何在不使用 API 的情况下查找 IP 地址的位置?

】如何在不使用API的情况下查找IP地址的位置?【英文标题】:HowtofindlocationofanIPAddressWithoutusingAPIs?【发布时间】:2011-04-0117:28:49【问题描述】:更多的理论问题。是的,我知道这些类型的问题在这里不受欢迎。但是假设不存在... 查看详情

如何在不使用外部主机的情况下以编程方式查找设备的外部 IP 地址?

】如何在不使用外部主机的情况下以编程方式查找设备的外部IP地址?【英文标题】:HowtoprogrammaticallyfindtheexternalIPaddressofadevicewithoutusingexternalhost?【发布时间】:2014-09-0808:20:51【问题描述】:当我读取设备的IP地址时,我总是得... 查看详情

如何在不使用 pip 的情况下在 Linux 终端中查看 pysnmp 版本

】如何在不使用pip的情况下在Linux终端中查看pysnmp版本【英文标题】:HowtoseethepysnmpversioninLinuxterminalwithoutusingpip【发布时间】:2016-08-2221:34:14【问题描述】:我已经在Linux中安装了pysnmp模块。我想知道安装了哪个版本的pysnmp。如... 查看详情

如何在不安装的情况下修改 package.json 依赖项

】如何在不安装的情况下修改package.json依赖项【英文标题】:Howtomodifypackage.jsondependencieswithoutinstallation【发布时间】:2021-09-2111:56:57【问题描述】:我有一个生成一些包的自动脚本,其中一个包使用其他生成的包作为依赖项。因... 查看详情

如何在不编辑 iOS 中的 /etc/hosts 的情况下使用直接 ip 访问 HTTPS?

】如何在不编辑iOS中的/etc/hosts的情况下使用直接ip访问HTTPS?【英文标题】:HowcanIaccessHTTPSusingdirectipwithoutediting/etc/hostsiniOS?【发布时间】:2015-08-2410:09:35【问题描述】:默认情况下,example.com解析为123.123.123.123,但如果我想将其... 查看详情

如何在不使用命令的情况下以编程方式关闭/重启 linux 机器(运行时)

】如何在不使用命令的情况下以编程方式关闭/重启linux机器(运行时)【英文标题】:Howtoshutdown/rebootlinuxmachineprogramaticallywithoutusingcommands(Runtime)【发布时间】:2017-03-1402:17:28【问题描述】:在Windows中,可以通过Java程序通过本地... 查看详情

如何在不使用 CURL 的情况下运行 HTTP 请求

】如何在不使用CURL的情况下运行HTTP请求【英文标题】:HowtoruntheHTTPrequestwithoutusingCURL【发布时间】:2016-01-0211:05:20【问题描述】:我有基于arm的busybox(嵌入式Linux),二进制文件有限。如何在不使用curl的情况下进行httppost或put... 查看详情

如何在不打开设备的情况下在 Linux 中以编程方式找出 ALSA 音频设备功能

】如何在不打开设备的情况下在Linux中以编程方式找出ALSA音频设备功能【英文标题】:HowtofindoutALSAaudiodevicecapabilitiesprogrammaticallyinLinuxwithoutopeningthedevice【发布时间】:2010-12-2409:54:00【问题描述】:如何在不先打开设备的情况下... 查看详情

如何在不使用collect()和for循环的情况下将一个(IP地址)的特定部分与RDD python pyspark中另一列中的其他IP地址进行比较

】如何在不使用collect()和for循环的情况下将一个(IP地址)的特定部分与RDDpythonpyspark中另一列中的其他IP地址进行比较【英文标题】:Howtocompareaspecificpartofone(Ipadress)withotheripadreessinanothercolumninRDDpythonpysparkwithoutusingcollect()andforlo... 查看详情

如何在不使用 inotifywait 的情况下监视目录的文件更改?

】如何在不使用inotifywait的情况下监视目录的文件更改?【英文标题】:Howtomonitoradirectoryforfilechangeswithoutusinginotifywait?【发布时间】:2018-08-1512:42:43【问题描述】:我需要一个用于开发的VM,而我的主机是我的IDE所在的位置。我... 查看详情

如何在不使用任何付费工具的情况下将 dbf 文件导入 mysql?

】如何在不使用任何付费工具的情况下将dbf文件导入mysql?【英文标题】:howtoimportdbffiletomysqlwithoutusinganypaidtools?【发布时间】:2013-12-0111:58:40【问题描述】:如何在不使用任何付费工具的情况下将dbf文件导入mysql?或者使用任何... 查看详情

如何在 Linux 上使用 C/C++ 执行 DNS 查找?

】如何在Linux上使用C/C++执行DNS查找?【英文标题】:HowmightIperformDNSlookupsusingC/C++onLinux?【发布时间】:2010-11-1020:01:34【问题描述】:如何使用capi(或任何其他语言)获得与host命令类似的功能?我需要更多信息,而不仅仅是gethost... 查看详情

如何防止某人在不限制一个 IP 的情况下劫持 rtmp 流源

】如何防止某人在不限制一个IP的情况下劫持rtmp流源【英文标题】:HowtokeepsomeonefromhijackingartmpstreamsourcewithoutrestrictingtooneIP【发布时间】:2021-12-3020:33:11【问题描述】:长时间聆听,第一次来电。我想知道是否有一种方法可以防... 查看详情

如何在不打开端口的情况下建立 TCP/IP 连接?

】如何在不打开端口的情况下建立TCP/IP连接?【英文标题】:HowtoestablishaTCP/IPconnectionwithoutopeningports?【发布时间】:2014-08-1013:27:10【问题描述】:我从来没有想过这个问题,而且我已经编程多年了。P2P程序(如聊天程序或torrent... 查看详情

在不使用 3rd 方库的情况下获取访客位置(IP)[重复]

】在不使用3rd方库的情况下获取访客位置(IP)[重复]【英文标题】:GetVisitorslocation(IP)withoutuseof3rdpartylib[duplicate]【发布时间】:2013-09-1611:52:25【问题描述】:我正在为我的用户创建一个Javascript,并且我正在努力使其尽可能轻。... 查看详情

在不使用 sysctl 的情况下修改 linux 中的内核参数

】在不使用sysctl的情况下修改linux中的内核参数【英文标题】:modifykernelparametersinlinuxwithoutusingsysctl【发布时间】:2016-06-1618:39:43【问题描述】:我有一个嵌入式系统。旧的linux操作系统在其上运行。当我输入“uname-r”命令时,... 查看详情

如何在不使用临时表或视图的情况下在多个列上使用 PIVOT [重复]

】如何在不使用临时表或视图的情况下在多个列上使用PIVOT[重复]【英文标题】:HowtousePIVOTonmultiplecolumnswithoutusingtemptableorviews[duplicate]【发布时间】:2019-06-2016:50:16【问题描述】:我在MicrosoftSQLServer2016上并且有3个表:CREATETABLE[dbo... 查看详情