2010-09-08 6 views
3

Je veux lancer un projet pour une classe CS.écrire un outil de découverte de réseau dans Objective-C

Quelqu'un peut-il donner un aperçu sur la façon d'écrire un outil qui traceront un réseau et les informations de l'appareil d'Etat, information IP, les ports ouverts, etc.

Je vais utiliser OS X.

+1

Il y a [lignes directrices pour poser des questions aux devoirs] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) sur StackOverflow que vous devriez lire . Vous devez vraiment poser des questions spécifiques sur une implémentation existante plutôt que de demander à la communauté de concevoir votre solution pour vous. –

+0

@brian - Je ne veux pas qu'une solution soit conçue. Pourquoi voudriez-vous présumer cela? Je suis à la recherche d'un aperçu conceptuel de la façon dont cela est fait. – ator

+2

Un aperçu conceptuel est un design. –

Répondre

4

Il y a peu de choses que vous pouvez utiliser pour découvrir les nœuds sur un réseau. SNMP va aider à détecter quelques périphériques réseau différents.

  • La diffusion d'une demande d'obtention SNMP pour sysName.0 vous donnera des résultats de tout ce qui répond à SNMP (même s'ils n'ont pas de valeur pour l'OID). Certains peuvent être des imprimantes, certains peuvent être des serveurs, certains peuvent être des NAS, etc. sysDescr.0 peut également être utilisé bien que pour de nombreux périphériques réseau (dans mon expérience) il renvoie la même valeur que sysName.0. Mac OS X est livré avec le NetSNMP libraries. Une fois que vous avez reçu des réponses d'agents SNMP, vous pouvez envoyer des demandes SNMP supplémentaires pour déterminer les détails du périphérique. Il existe des fichiers lisibles par l'utilisateur qui les expliquent en détail dans /usr/share/snmp/mibs.

  • Vous pouvez utiliser un ping de diffusion (votre application nécessitera des privilèges root pour vous donner un accès brut au protocole Internet pour la construction d'un paquet ping de diffusion, ou un paquet ping en général). Juste diffuser quelques paquets et attendre des réponses. Le code source de l'utilitaire de ping BSD utilisé dans Mac OS X peut être trouvé à Apple's website. L'exécutable ping est généralement installé avec le propriétaire root et avec le bit setuid, ce qui signifie que l'exécutable ping est exécuté en tant que root même lorsqu'il est appelé par un utilisateur non root (c'est la raison pour laquelle les utilisateurs non root peuvent utiliser ping). Vous remarquerez cependant que dans le code source de ping, il ne crée que le socket en tant que root et supprime immédiatement ses privilèges root.

  • Zeroconf/Bonjour vous aidera également. Jetez un oeil à Core Foundation's CFNetServices or Foundation's NSNetServices. Les systèmes Mac peuvent être configurés pour se publier très facilement. Il existe également des implémentations Windows et Linux, mais bien sûr, celles-ci doivent être en cours d'exécution sur les périphériques réseau avant de pouvoir les détecter avec votre programme. Pour déterminer quels ports sont ouverts, vous pouvez simplement exécuter une boucle sur la plage de ports désirée et tenter d'établir une connexion. Gardez à l'esprit cependant que de nombreux serveurs considèrent cela comme une attaque et vont laisser tomber des paquets et peut-être même de manière permanente blacklister votre adresse IP. Une fois que vous avez établi une connexion TCP réussie, vous pouvez rechercher le numéro de port dans le fichier /etc/services pour déterminer le nom du service. Cela peut être fait en utilisant la fonction POSIX getnameinfo.

+0

c'est très constructif pour m'aider à commencer à mettre en place la fonctionnalité et la collecte des exigences. Je vous en suis reconnaissant. – ator

Questions connexes