2010-09-08 60 views
3

我想开始一个CS类的项目。在Objective-C中编写网络发现工具

任何人都可以提供关于如何写一个工具,将绘制出的网络和设备的状态信息,IP信息,开放端口等

我将使用OS X.

+1

有[询问家庭作业问题指导方针(http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions)在计算器上,你应该阅读。您真的需要询问关于现有实施的具体问题,而不是要求社区为您设计解决方案。 – 2010-09-09 00:11:09

+0

@brian - 我不想要一个解决方案。你为什么会这样想?我正在寻找如何完成的概念性概述。 – ator 2010-09-09 00:17:47

+2

概念性概述是一种设计。 – 2010-09-09 01:18:38

回答

4

有一个见解你可以用来发现网络上的节点的东西很少。

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

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

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

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

+0

这对于帮助我开始布置功能和需求收集非常有建设性。我很感激。 – ator 2010-09-09 05:20:22