Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Работа с сетевой картой на аппаратном уровне
Посл.ответ Сообщение

Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 04 сентября 2007 14:45
· Личное сообщение · #1

Не встречали простеньких примеров по низкоуровневой работе с сетевой - стандартный миниум, передача байт (или файла) по типу сервер-клиент? В гугле на сорсы не густо...
Подобное с COM портом тоже не будет лишним.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 04 сентября 2007 20:04
· Личное сообщение · #2

Freecod, задачу ты IMHO ставишь в корне не верно. Что бы заботать с железом напрямую тебе надо читать data sheet железа. Для многих чипов эти спецификации опубликованы, и для ещё большего написаны драйвера. Если интересно - смотри в ядро линукса - drivers/net/. Главный вопрос вот в чём - ты пишешь свою операционку? Если да, то тебе надо писать драйвер который реализует абстрактный интерфейс, а если нет, то твоя OS уже использует железо и ты не сможешь просто так отправить пакет. В любом случае разговор об "отправки файла" не идёт т.к. железо оперирует пакетами.

Если ты сидишь под windows, то можешь разговаривать с картой через NDIS - это как раз тот слой который делает абстракцию от железа. Если хочешь писать сам, то копать нужно в сторону ndis intermediate driver или protocol driver. Если тебе надо rootkit, то качни чью-нить реализацию kernel mode sockets и используй.



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2007 06:16
· Личное сообщение · #3

Нет-нет, просто процесс познания сопряжённый с напрягом со стороны преподователя ОСей =) Работа в Win, не через API или прерывания, а напрямую. Спецификация COM была на лекциях, а вот с сетевой картой всё неизвестно. Хотя вроде как должно быть аналогично. Кое-какую инфу уже нашёл, но если найдутся сорсы, буду рад.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 05 сентября 2007 07:24
· Личное сообщение · #4

Freecod пишет:
а вот с сетевой картой всё неизвестно

Где учишся, если не секрет? Впервые слышу чтобы студентам давали задание такой сложности, как передача файла напрямую через сетевуху. Вот список того, что тебе понадобиться реализовать:
1 - network io driver (собственно драйвер сетевухи)
2 - ARP
3 - IP
4 - TCP
5 - FTP/HTTP (собственно передача файла).

Для упрощения я бы советовал не заморачиваться с полноценным tcp/ip, а сделать реализацию ARP ответа (в виде зашитого заранее пакета), упрощенный IP (без фрагментации и сборки пакетов), упрощенный UDP (допустимо не подсчитывать чексуму пакетов) и TFTP собственно для передачи файла.
Только заранее спроси у своего препода конкретную модель сетевухи на которой это все должно работать, если будет что-либо совместимое с NE2000 то тебе повезло, если nForce чипы - то полная жопа (по ним нет никакой документации).

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2007 08:06
· Личное сообщение · #5

Факультет компьютерных технологий в крупном универсетете "с претензиями" =) Но это задание как бы "сверху" обязательного COM, для дополнительных ++
Мне всё это представлялось проще... на сервере программа посылает кадр(ы) с именем, размером файла клиенту на другую машину, потом идёт поток байт файла. Клиент это всё льёт в буфер, а потом создаёт файл. Соеденены машины как я понял напрямую. Здесь как я понимаю возникают отличия от COM с его посылкой данных через кабель в "никуда" и приёмом из "ниоткуда". Или нет? Рядом бродят мысли про MAC-адрес, пересылку пакетов в "нормальной" сети конкретному адресату, но всё смутно...
Буду благодарен за ссылки по теме.



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2007 08:23
· Личное сообщение · #6

Ознокомился с вопросом ещё ближе. Особенно порадовала фраза:
Производители сетевых карт никогда не утруждали себя разработкой стандартного протокола управления картой на аппаратном уровне. Они просто выпускали драйвера для Windows, и в большинстве случаев потребителю этого было достаточно.
Все веселее и веселее.
Начинаю думать, что ну их в * эти плюсы =\



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 05 сентября 2007 10:23
· Личное сообщение · #7

Freecod пишет:
Мне всё это представлялось проще... на сервере программа посылает кадр(ы) с именем, размером файла клиенту на другую машину, потом идёт поток байт файла.

Ну, если компы соединены проводом напрямую, то можно и так слать, даже не заморачиваясь с ethernet хедером. Переводишь сетевуху в promiscous mide и можешь принимать любые пакеты произвольного формата. Короче проблема сводиться собственно к работе с сетевухой. И если неизвестно на какой именно сетевухе должно работать, то можно за это даже не браться. Для ne2000 и realtek чипов я тебе могу найти примеры. Для intel чипов можно написать по датащитам. Для nvidia - только реверсить виндовые драйвера.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2007 12:00
· Личное сообщение · #8

Если не сложно, залей примеры для чего есть. В пятницу уточню и буду тогда уже думать.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 05 сентября 2007 12:11
· Личное сообщение · #9

rapidshare.com/files/53526105/ne2000.rar.html

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2007 13:06
· Личное сообщение · #10

Спасибо, буду разбиратся.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 05 сентября 2007 19:14 · Поправил: s0larian
· Личное сообщение · #11

Freecod, ёлки, тебе же ntldr растолковал - всё упирается в модель сетевухи. Тебе дали железо? Под какой операционкой ты это всё собираешься делать? Ты вообще представляешь себе как отладить кусок kernel mode кода?

Вот ветвь линуксовых исходников: htt_://www.linuxhq.com/kernel/v2.6/22/drivers/net/index.html

Freecod пишет:
Здесь как я понимаю возникают отличия от COM с его посылкой данных через кабель в "никуда" и приёмом из "ниоткуда". Или нет? Рядом бродят мысли про MAC-адрес, пересылку пакетов в "нормальной" сети конкретному адресату, но всё смутно...

IMHO самая простая модель будет послыть broadcast frames. Каждый комп включённый в hub/switch будет их получать. Если хочешь, то можно реализовать и unicast но тогда тебе нужет ARP или его аналог.

htt_://en.wikipedia.org/wiki/Ethernet
htt_://en.wikipedia.org/wiki/Address_Resolution_Protocol
htt_://en.wikipedia.org/wiki/Internet_Protocol

Чуть теории - если железо современное, то тебе придётся разбираться с PCI шиной (контроллером) и DMA transfers. Сетевухе понадобиться packet descriptor ring... Если старая и использует programmed IO, то будешь забивать пакет в регистр по несколько байтов. Короче много всего.

Самая большая беда, думаю, будет это всё отладить под виндузами: обычный драйвер загружать нельзя, железо надо откоконфигурировать... Если будешь писать NDIS драйвер, то вначале попаришься с этой спецификацией... Если под линуксом - то проще. Компилишь kernel module и вперёд. Будешь разбираться с io control calls и procfs

Короче, тут много подходов и много часов работы. Спрашивай более конкретно.


 eXeL@B —› Программирование —› Работа с сетевой картой на аппаратном уровне
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати