问题标签 [arp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - Connect() 从 ios 到同一子网中的 ios 设备
我开发 IOS 应用程序,它需要从一台 iPhone(或 iPod)到另一台 iPhone(或 iPod)进行标准 TCP 连接。模拟器和设备上的应用程序之间以及两个模拟器之间的连接效果很好。
应用程序使用 posix connect() 并且我必须坚持这种方法,因为其他模块是纯 C 的。
调用 connect() 应用程序块时,超时后返回错误。通信是通过局域网中的wifi进行的
我已经嗅探了流量并遇到了,在连接到模拟器后,设备发送 ARP 并在应答后,标准 TCP 握手进行并建立会话。
iPhone<>iPhone 在 ARP 请求后停止相同的情况,因为另一台 iPhone 没有响应它。此外,iOS 仅发送无偿 ARP(宣布它是 mac ip 对)。我的 MAC 似乎正在处理这个请求,因为它的 ARP 表有 iPhone 记录,它不适用于另一台 iPhone。
我试过 bonjour 服务,但它也只适用于模拟器 <> 设备。
我的问题:有没有办法允许这样的交流?有没有可能只是我的 iPhone 有问题?是否有任何明确的方法来告诉操作系统为 arps 发送响应,或者它是否以某种方式阻止了流量 ios<>ios 通信。
networking - 两机网络中的 ARP 头数据
我通过网线连接了两台机器。我需要通过 Wireshark 获取 ARP 请求数据。当我 ping 另一台机器的 IP 时,我在 Wireshark 上收到了 ARP 请求。但是,它不是在广播消息。它直接针对 ping 的 IP 地址。我认为只有两台机器的局域网不需要做广播。我对吗?谁能给我解释一下?
c# - Why does Physical address from System call GetIpNetTable have 8 Byte (and not 6)?
In my latest project I use GetIpNetTable for accessing the Windows ARP-Table from C# using .NET
I noticed, when I looked at the MAC Addresses, that the last two bytes (7 and 8) of my entries kept changing! As MAC addresses usually have only 6 Bytes, I wondered what these two bytes contain...
See http://msdn.microsoft.com/en-us/library/cc704859%28v=prot.10%29.aspx
networking - 回复/请求 ARP 数据包中的 MAC 地址有什么用,我们什么时候可以从以太网报头中提取它
当我们可以从以太网标头中提取它时,我很困惑为什么我们在 ARP 数据包中需要 MAC 地址。只需保持 IP 地址和其他字段不变并删除 MAC 地址即可。我们可以从以太网中提取它们。我在想什么吗?
谢谢。
networking - 用于 arp 中毒、mac 欺骗、ip 欺骗的软件
我最近开始了 Ccna 课程(思科),我想在我的家庭网络上尝试其中的一些技巧。
任何人都可以为我指出一些很酷的软件吗?
我也想知道如何以编程方式做到这一点,所以如果有任何教程,请告诉我:)
非常感谢!
编辑:适用于 Windows 吗?
c - 在 Linux 上嗅探数据包时过滤网络堆栈中的数据包?
我有一个低级网络/Linux 大师的问题,
我必须为我大学的一个安全项目构建两个工具。第一个工具是 ARP 中毒攻击者,它会从远程主机毒化 ARP 缓存,以检索他发送到另一台主机的数据。我使用 RAW 套接字在 C 中编写了这个工具,它运行良好,我能够拦截从主机 A 传输到主机 B 以及从主机 B 传输回主机 A 的数据。
问题出现在编写第二个工具时,它是一个嗅探器,其目的是读取/编辑/丢弃来自主机 A 或主机 B 的数据包。我想象了一个系统,当我发现来自这些主机之一的数据包时,我的程序将问我是否要让这个数据包通过,如果我想修改它,或者我只是想丢弃它。我使用在 linux 中激活了 IP 转发
我能够读取在两台主机之间传输的所有数据。但我不知道如何编辑/删除这些数据包,因为 linux 的网络堆栈负责管理来自我的网络接口的数据包的输入和输出。如果你愿意,我只是充当被动攻击者。
我的第一个想法是禁用 ip 转发并自己管理数据包的路由。但是当我禁用 ip 转发时,我根本无法从 A 或 B 获取任何数据,这是因为 linux 的网络堆栈会在内核模式下自动丢弃 IP 地址不是我的计算机的数据包。
然后我尝试激活混杂模式,但这是不必要的,因为该模式仅在物理层上运行(查看以太网接收数据包中的目标 MAC 地址是否与本地接口上的 MAC 地址匹配)。所以基本上,混杂模式可以帮助我们避免 linux 堆栈的物理过滤器,而不是逻辑过滤器(我收到的数据包中的目标 IP 地址是 B 的 IP 地址而不是我的,所以 linux 的网络堆栈只是丢弃数据包)。
所以我的问题是,我怎样才能设法编辑我收到的数据包并将它们发回,或者如果我愿意的话就简单地丢弃它们。我知道这是一个棘手的问题,我已经进行了一些研究以自己找到解决方案,但我没有找到令人满意的答案。
我知道iptables有一个解决方案,我们可以要求他让来自某个 IP 地址的一些数据包通过,但我不想要涉及第三方工具的解决方案,我想将所有内容封装在我的程序中。
供参考,开发环境是Linux/Ubuntu Kernel 3.0.0-16,一切都是用C语言制作的。
.net - 从 IP ping/获取 MAC 地址,忽略 ARP 缓存
对于一系列嵌入式设备的配置软件,我们必须通过IP地址找到设备。对于任何给定的 IPv4 地址,我们需要
- 找出MAC地址(因为可以过滤MAC地址)
- 查明设备是否可达,即 ping 它。
我不确定最好的方法是什么。起初,我们尝试调用SendARP
它,它工作得很好,但是如果 IP 地址已经在那里,它只使用缓存,并且似乎没有办法绕过这个(除了刷新整个缓存,这是一个特权操作)。这意味着我们必须执行第二步,然后 ping 设备(我认为我们应该先 ping 它,然后SendARP
在它可以访问时调用),但是如果设备可以访问,这似乎是一个太多的步骤。或者如果 ping 成功,正确的地址是否已经在 ARP 缓存中?IP地址可能会相对频繁地更改其对应的MAC地址,因为不同的设备连接在单独的网络中,所以我认为我们必须强制执行实际的ARP请求。
我能想到的替代方法是调用ResolveNeighbor
/ ResolveIpNetEntry2
。至少后者的文档似乎是我们需要的(清除此IP地址的ARP缓存并发送实际请求),但它只是Vista或更高版本。在 XP 上,我们必须调用ResolveNeighbor
,这更简单,但不再记录。这涉及检查正确的功能(或者只是调用ResolveNeighbor
,如果它失败,它记录在 Vista 或更高版本上执行,调用ResolveIpNetEntry2
)。
我只是不确定最好的方法是什么,或者我是否遗漏了什么。你会推荐什么?请注意,如果有的话,我也会采用纯 .NET 解决方案;)
更新:
似乎 ResolveNeighbor 尽管有文档记录,但在 Windows XP 上并不存在,至少在 IPhlpapi.dll 中不存在。这是否意味着该功能在 XP 上不可用?
为了弄清楚这一点,我既没有设计设备,也没有设计部署过程。对于这个问题,只要假设
- 所有设备都已经有 IP 地址并且
- 计算机在同一子网中,但不一定属于网络(即它是技术人员的便携式计算机),并且
- IP 地址在工具启动时是已知的,即用户可以输入它们或从配置文件中读取它们,并且
- 同一台计算机,甚至可能没有重新启动工具,在几秒钟前被用于连接到具有相同 IP 地址的完全不同的网络,例如布局相同的不同建筑物。
这意味着我可能在A楼有IP 192.168.0.100,即MAC地址A,然后将计算机连接到B楼,该楼也有IP 192.168.0.100,但这次是MAC地址B。用户说“连接到 192.168.0.100" 并且我们必须确保 192.168.0.100 不仅可以访问,而且实际上是 MAC B 而不是 MAC A。我认为 ResolveIpNetEntry2 实际上会让我这样做,但它在 Windows XP 和那里不可用似乎不是这个的替代方案。
我不确定我还能如何理解这一点。重点不在于如何发现或安装设备。
duplicates - 检测具有相同 MAC 地址和相同 IP 地址的计算机
在 LAN 上,我如何检测具有相同 MAC 地址和相同 IP 地址(由 DHCP 提供)的计算机?
在我的局域网中,这是一个常见问题,因为虚拟机克隆一直在进行。
到目前为止,我已经尝试过:
我已经有一个使用 scapy 的工作脚本来检测具有相同 MAC 但不同 IP 地址的计算机。
windows - 在启动期间在 Windows 机器上设置 IP 地址
我是一个 Linux 人。我有一个非常具体的问题,我试图在 Windows 机器上解决,所以请原谅我在这里的无知。
问题(无法重新定义):我有一台具有 3 个 NIC 的 Windows 机器。每次启动时,我都需要一种方法来动态自动设置其 IP 地址。这台机器每次开机都会有不同的地址信息。机器在启动时将有一个由名称/值对组成的文件(即一个充满“=”条目的文件)。我需要使用从批处理文件运行的标准 Windows 命令提示符命令来执行所有这些任务。我没有 VB 或任何可用的东西。
最大的问题:我认为,如果 Windows 对其网络接口的命名具有确定性,这将容易得多。如果是,我可以解析这个文件并简单地设置,比如使用 netsh 设置“本地连接 2”的 IP 地址。不过,就目前而言,Windows 有时会改变它用于物理 NIC 的名称。那么今天的“本地连接2”可能明天就是“本地连接”。所以,我必须想办法在启动过程中通过使用 MAC 地址并找到相应的 NIC 来确定这些事情。如果没有 grep、awk 等,从 ipconfig 输出中获取这些信息变得越来越困难。
我尝试过/完成的事情: (1) 我通过本地组策略编辑器添加了一个 Windows 设置启动脚本,弄清楚了如何在 Windows 启动期间启动我的批处理文件。(2) 我已经弄清楚如何从批处理文件中解析我的名称/值对文件并获取令牌。(3) 我试过用arp命令设置ip映射。很明显,这只是将数据包正确地路由到接口。但是,一旦数据包到达接口,它们就会被丢弃,因为数据包是用于 NIC 不属于的网络的。这对我没有好处。我需要为网卡设置 IP 地址。
我当前的计划/我需要帮助:(1)解析我的名称/值对文件(2)在名称/值对文件中找到与mac地址对应的网卡名称(3)使用netsh设置这些卡的 ip 地址 (4) 全部从批处理文件中执行 (5) 尽量不要抱怨我没有使用 Linux 机器:-)
任何帮助是极大的赞赏。
c - 数据传输时禁用 ARP
我通过 PC1 向 PC2 发送数据,它们都是 Linux 2.6 内核机器。此转移将需要几个小时。PC1 中的 ARP 缓存失效超时设置为 50 秒。所以在数据传输过程中,PC1 每 50 秒向 PC2 发送一次 ARP 请求(因为 PC1 中的 arp 缓存过期)。但理论上,由于数据传输正在进行,因此不需要向 PC2 发送 ARP 请求(因为 PC1 知道 PC2 仍然存在)。
如何禁用 PC1 内 PC2 的 ARP 条目的到期(如果到 PC2 的数据传输仍在进行中)?
注意:我想在传输到 PC2 期间仅为 PC2 ARP 缓存条目禁用 arp-cache 到期。传输后让 ARP 条目过期。