【问题标题】:Traceroute in Objective-CObjective-C 中的 Traceroute
【发布时间】:2009-12-28 11:29:20
【问题描述】:

有人知道objective-c 中用于traceroute 的代码示例吗? 注意-我正在寻找 traceroute/tcptraceroute 的代码实现,而不是实用程序。

【问题讨论】:

  • 我应该注意到,应用商店中相当多的应用程序提供了traceroute。
  • 我会很高兴有一个直接在 iPhone 上工作的 C 版本。

标签: iphone objective-c macos network-programming


【解决方案1】:

您可以从here 获取源代码。但我同意 diciu,您将无法在未越狱的 iPhone 上的原始套接字上使用它

【讨论】:

【解决方案2】:

据我所知,标准 traceroute 需要原始套接字(即 root 访问权限)。在 Mac OS X 上,traceroute 二进制文件是 setuid:

cristi:~ diciu$ ls -la /usr/sbin/traceroute
-r-sr-xr-x  1 root  wheel  110112 Oct 16 12:28 /usr/sbin/traceroute

我认为你不能在 iPhone 上使用原始套接字 - 也许 tcptraceroute 是一个选项?

【讨论】:

  • diciu- 谢谢,很好的提示- tcptraceroute 看起来是一个更好的选择,还因为它也可以绕过防火墙过滤器。我感谢良好的反馈
【解决方案3】:

如果您想在 Objective-C 中重新实现 traceroute,那么您只能靠自己了。如果你只想从 Objective-C 运行 traceroute,NSTask 对你来说可能是最简单的,但在 iPhone 上是不可能的。

【讨论】:

  • 事实上,我希望在 Objective-C 中重新实现 Traceroute。看起来我需要自己从 C 移植它,但希望不必重新发明轮子。
  • 重新实现,顾名思义,就是重新发明轮子。纯 C 代码可以在 Objective-C 应用程序中正常运行。
  • 好的,所以你明白我在 Objective-C 中重新实现它的动机了;普通 C 调用会阻止 Mac OSX/iPhone 开发中的运行循环。重新实现 traceroute 使其不会阻塞 runloop 不是微不足道的,而是必要的,如果您希望创建一个可视化实用程序,该实用程序会在每个 TTL 序列返回时进行更新。
  • Objective-C 消息会像 C 函数调用一样阻塞运行循环——主要是因为 Objective-C 消息一系列冗长的 C 函数调用。使用线程。
  • Objective-c 消息不是一组冗长的函数调用。 objc_msgSend() 在常见情况下是一个汇编指令的短序列,后面跟着一个尾调用跳转到方法的 IMP(标准 C 函数)。 (不过,是的,任何调用都会阻塞主事件循环。)
猜你喜欢
  • 2010-09-13
  • 2015-06-03
  • 2013-03-05
  • 2021-06-30
  • 2012-09-13
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多