objective-c - 在 Objective-C 中编写网络发现工具

标签 objective-c network-programming

<分区>

我想开始一个 CS 类(class)的项目。

谁能提供有关如何编写工具来映射网络和状态设备信息、IP 信息、开放端口等的见解

我将使用 OS X。

最佳答案

有一些东西可以用来发现网络上的节点。

  • SNMP 将有助于检测一些不同的网络设备。为 sysName.0 广播 SNMP get 请求将为您提供任何响应 SNMP 的结果(即使它们没有 OID 值)。有些可能是打印机,有些可能是服务器,有些可能是 NAS 等。sysDescr.0 也可以使用,尽管对于许多网络设备(根据我的经验)它返回与 sysName 相同的值.0。 Mac OS X 附带 NetSNMP libraries .收到来自 SNMP 代理的响应后,您可以发送额外的 SNMP 请求以进一步确定有关设备的详细信息。在 /usr/share/snmp/mibs 中有人类可读的文件详细解释了这些内容。

  • 您可以使用广播 ping(您的应用程序需要 root 权限才能让您原始访问 Internet 协议(protocol)以构建广播 ping 数据包或一般的 ping 数据包)。只需广播几个数据包并等待回复。在 Mac OS X 中使用的 BSD ping 实用程序的源代码可以在 Apple's website 找到。 . ping 可执行文件通常与所有者 rootsetuid 位一起安装,这意味着 ping 可执行文件已运行作为 root 即使在被非 root 用户调用时也是如此(这就是非 root 用户可以使用 ping 的原因)。不过您会注意到,在 ping 的源代码中,它仅以 root 身份创建套接字,然后立即放弃其 root 特权。

  • Zeroconf/Bonjour 也会提供帮助。看看Core Foundation's CFNetServices or Foundation's NSNetServices . Mac 系统可以配置为非常容易地发布自己。也有 Windows 和 Linux 实现,但当然,在您可以使用您的程序检测到它们之前,这些需要实际运行在网络设备上。

  • 为了确定哪些端口是开放的,您可以简单地在所需的端口范围内运行一个循环并尝试建立连接。请记住,虽然许多服务器认为这是一种攻击,并且会丢弃数据包,甚至可能将您的 IP 永久列入黑名单。成功建立 TCP 连接后,您可以在 /etc/services 文件中查找端口号以确定服务的名称。这可以使用 POSIX 函数 getnameinfo 完成。

关于objective-c - 在 Objective-C 中编写网络发现工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672755/

相关文章:

c - 在单个 udp 服务器中处理 40 个客户端的可能算法

sockets - Solaris - 我的进程监听所有接口(interface),但其他进程监听本地主机 :6011

java - 为什么我的浏览器发送两个具有相同属性(除了推送之外)的数据包?

ios - 如何将 NSURLSessionConfiguration 配置到 NSObject 类中?

iphone - 到达特定位置时打开 iPhone 应用程序?

javascript - 使用 UIButton 单击 UIWebView 中的 anchor

tcp - 客户端发送的MSS和主机接收到的MSS不一致

java - 比较传输对象的值

objective-c - objective-c : Go Back to Page 1 Button

ios - 以编程方式将 NSLayoutAttributeLeading Space 设置为 Superview 并带有一些警告