Взгляд на RAW сеть с разных сторон (raw socket net).

Linux, безопасность, сети и все что с этим связано
olecom
Интересующийся
Сообщения: 65
Зарегистрирован: 03 апр 2008, 18:54
Откуда: Родом: Чернавчицы, Брест, Бульбастан; Сейчас: Оломоуц, Чехия.

Взгляд на RAW сеть с разных сторон (raw socket net).

Сообщение olecom »

Если кто имел опыт с контроллерами со встроенным Ethernet, могут найти интересным разные способы реализации свободных от IP, TCP, UDP протокольной нагрузки интерфейсов.

http://kerneltrap.org/node/15896

Менее гибко дело обстоит в оффтопик системе. Но поставив winpcap (с биндингами к питону для простоты) можно получать данные запакованные в простые ethernet пакеты.

Простое winpcap/pcapy получение фрэймов ниже IP:

Код: Выделить всё

#!/6aTBa/win32/python
import sys, pcapy
from array import array

def eth_out(header, data):
     eth_dst = data[:6]    # Most Significaian Byte First
     eth_src = data[6:12]  # MSB
     eth_type = data[12:14]
     eth_data = data[14:]

     print array('B', eth_data), "<-END\n"

eth0 = pcapy.open_live(pcapy.findalldevs()[1], sys.maxint, 0, sys.maxint)
while 1:
    eth0.dispatch(1, eth_out)
Для того чтоб организовать диалог(winpcap+pcapy только получает, снифит), простым решенем является IP броадкаст (ARP резолвинг не влияет на него) пакетов с ПК и фильтрация их в МК. Размер и количество этих пакетов сравнительно невелико (управляющая информация). Для их аппаратной фильтрации в микроконтроллере на уровне ethernet адресов, можно реализовать что-то типа рукопожатия (hand-shaking) с нахождением и запоминанием адреса хоста.

Простой броадкастинг:

Код: Выделить всё

#!/6aTBa/win32/python
import socket, time
s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
s.connect(("255.255.255.255",0))

while 1:
    print "s:--\n", s.send("X-Ether!")
    time.sleep(1)

--

Код: Выделить всё

sed 'sed && sh + olecom = love' << ''
-o--=O`C
 #oo'L O
<___=E M

olecom
Интересующийся
Сообщения: 65
Зарегистрирован: 03 апр 2008, 18:54
Откуда: Родом: Чернавчицы, Брест, Бульбастан; Сейчас: Оломоуц, Чехия.

простой интерфейс на сто мегабит

Сообщение olecom »

http://olimex.com/dev/dm9000e-h.html

Такие устройства, это как последовательный порт на сто мегабит. Почти как популярное FTDI для USB:

http://www.ftdichip.com/Products/Evalua ... odules.htm

Однако все прелести стека сетевых протоколов и способы их обходить сохраняются. Это порой и является камнем предкновения разработчиков аппаратуры, которые привыкли писать и читать порты ввода/вывода. Офтопик ХР после 98 очень сильно напряг бородатых дядек своими запретами на работу с портами из обычного дос эмулятора. Но как-то пережили.

И это как-то переживают, записывая всякие разные стрип, у и мини TCP/IP реализации в свои контроллеры. Порой и HTML мусор там находит место, какая убогость...

Как можно заметить в "ETHERNET RAW socket", можно вообще не следовать Ethernet адрессации, а просто включить promisc mode на сетевой карте и передавать фрэймы как цельные куски информации.

Это ли не то что хотят обычные разработчики железа (на ПЛИС), приходя в ужас от много-сотенных даташитов на всякие AVR, Freescale, ARM и прочий зоопарк? Не говоря уже о дорогих программаторах, компиляторах, библиотеках, которых нету или есть тоже за отдельную плату.

http://www.opencores.org/projects.cgi/web/ethmac

Однако реальные мужики могут и своё сделать.

Ответить