2010-09-01 10 views
4

Je souhaite écrire un programme amorçable dans l'assembleur capable d'envoyer et de recevoir des paquets réseau. Je ne souhaite utiliser aucune bibliothèque, je voudrais créer tout seul (et apprendre en même temps). Malheureusement, je n'ai pas pu trouver d'informations concernant la communication avec la carte réseau au niveau le plus bas (envoi de sockets raw). Je crois qu'il est nécessaire d'utiliser les instructions OUT et IN, bien que je n'ai trouvé aucune information sur le port affecté à la carte réseau (ou comment le trouver, si ce n'est pas toujours le même). Quelqu'un pourrait-il me diriger dans la bonne direction? ;-)Mise en réseau bas niveau en assembleur (compatible x86)

+6

tout ce que je dois dire est bonne chance! –

Répondre

1

Différentes cartes réseau ont des interfaces matérielles différentes (ce qui explique pourquoi elles ont des pilotes de périphériques différents).

Vous pouvez obtenir des informations sur le matériel du fabricant de l'appareil (ou vous ne pouvez pas: ils peuvent considérer cela comme des informations propriétaires et écrire leurs propres pilotes de périphérique).

Vous pourriez également obtenir cette information en regardant le code source des cartes réseau open source: par exemple, je suppose, pour Linux; ou, peut-être, le Crynwr packet drivers.

+0

Donc, vous dites que tous les systèmes d'exploitation qui ne nécessitent pas de pilotes installés pour une carte réseau déjà avez tous les pilotes de toutes les cartes réseau existantes –

+0

Il y a beaucoup de ces pilotes, par exemple 20 pages de pilotes Intel à http://drivers.softpedia.com/get/NETWORK-CARD/INTEL/ – ChrisW

+0

J'ai acheté ma copie de Windows préinstalle d quand j'ai acheté cet ordinateur. Le fabricant de l'ordinateur («OEM»), qui a installé le système d'exploitation, connaissait le type de carte réseau qu'il avait installé dans cette machine et a donc pu installer le bon pilote. – ChrisW

4

Il s'agit d'un problème assez important à résoudre. Même en arrivant à des «bases brutes» va être un peu de travail. Tout d'abord, avec un BIOS moderne, votre carte réseau ne sera normalement pas configurée par défaut, vous devrez donc composer avec PCI configuration pour configurer certains ports visibles par le processeur. Cela vous donnera la capacité de base pour que le processeur communique réellement avec la carte réseau. Deuxièmement, vous devrez trouver de la documentation sur le chipset particulier qu'il utilise pour savoir comment lire et écrire des données réseau. Avec certaines cartes plus anciennes, c'était assez facile, mais la plupart des plus récents agissent comme des maîtres de bus avec du matériel de dispersion/collecte. Les programmer pour faire même un simple transfert peut être non trivial. Cela dépend complètement du matériel. Troisièmement, vous aurez besoin de développer une partie substantielle d'une pile IP pour pouvoir utiliser même des sockets raw. Au niveau du matériel, vous avez essentiellement deux possibilités: recevoir les paquets arrivant et envoyer des paquets à des adresses MAC spécifiées - ou à d'autres adresses matérielles, si votre carte n'est pas (et ne ressemble pas) à Ethernet. Les deux autres couches suivantes seront un ARP resolver (pour vous permettre d'utiliser des adresses IP au lieu d'adresses MAC) et un client DNS (vous pouvez donc utiliser des noms d'adresses normaux plutôt que des quadrichromie en pointillés). cela, vous aurez probablement envie de construire un logiciel qui sait comment créer/comprendre IP datagrams