Низкоуровневая сеть в ассемблере (совместимая с x86) - PullRequest
5 голосов
/ 02 сентября 2010

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

Ответы [ 2 ]

6 голосов
/ 02 сентября 2010

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

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

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

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

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

1 голос
/ 02 сентября 2010

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

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

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

...