2010-09-01 4 views
4

Я хочу написать загрузочную программу на ассемблере, которая будет способна отправлять и получать сетевые пакеты. Я не хочу использовать какие-либо библиотеки, я бы хотел создать все это самостоятельно (а также учиться при этом). К сожалению, мне не удалось найти информацию о связи с сетевой картой на самом низком уровне (отправка сырых сокетов). Я считаю, что необходимо использовать инструкции OUT и IN, хотя я не смог найти информацию о порту, который назначен сетевой карте (или как ее найти, если это не всегда одно и то же). Может ли кто-нибудь указать мне в правильном направлении? ;-)Низкоуровневая сеть в ассемблере (совместимо с x86)

+6

все, что я хочу сказать, это удача! –

ответ

1

Различные сетевые карты имеют разные аппаратные интерфейсы (вот почему они имеют разные драйверы устройств).

Вы можете получить информацию об оборудовании у производителя устройства (или вы можете: они могут считать это конфиденциальной информацией и писать собственные драйверы устройств).

Вы также можете получить эту информацию, посмотрев исходный код сетевых карт с открытым исходным кодом: например, я бы предположил, для Linux; или, возможно, Crynwr packet drivers.

+0

Итак, вы говорите, что все операционные системы, для которых уже не установлены драйверы для сетевой карты есть все драйверы всех существующих сетевых карт? –

+0

Есть много этих драйверов, например, 20 страниц драйверов Intel по адресу http://drivers.softpedia.com/get/NETWORK-CARD/INTEL/ – ChrisW

+0

Я купил свою копию Windows preinstalle когда я купил этот компьютер. Разработчик компьютера («OEM»), который установил O/S, знал, какую сетевую карту они вложили в эту машину, и поэтому смог установить правильный драйвер. – ChrisW

4

Это довольно большая проблема. Даже дойти до «сырых сокетов» будет довольно много работы.

Во-первых, с использованием современной BIOS ваша сетевая карта обычно не будет настроена по умолчанию, поэтому вам нужно будет обработать PCI configuration, чтобы настроить ее на наличие некоторых портов, которые видны процессору. Это даст вам основную возможность заставить CPU фактически разговаривать с сетевой картой.

Во-вторых, вам нужно будет найти документацию на конкретном чипсете, который он использует, чтобы вы знали, как читать и записывать сетевые данные. С некоторыми более старыми картами это было довольно легко, но большинство более новых были хозяевами автобусов с оборудованием для разбрасывания/сбора. Программирование их для выполнения даже простой передачи может быть нетривиальным. Однако это зависит от аппаратного обеспечения.

В-третьих, вам нужно будет разработать значительную часть стека IP, чтобы иметь возможность использовать даже сырые сокеты. На аппаратном уровне у вас в основном есть две возможности: получать все входящие пакеты и отправлять пакеты на указанные MAC-адреса - или на другие аппаратные адреса, если ваша карта не является (и не похожа на Ethernet).

Следующие пару слоев поверх этого будут ARP resolver (чтобы использовать IP-адреса вместо MAC-адресов) и DNS-клиента (так что вы можете использовать обычные имена адресов вместо чего-то вроде пунктирных квадрациклов. что вы, вероятно, захотите создать программное обеспечение, которое знает, как создавать/понимать IP datagrams.

Смежные вопросы