Сетевое программирование уровня 2 OSI - PullRequest
6 голосов
/ 16 октября 2011

Недавно я взял несколько классов по сетевому взаимодействию (CCNA с 1 по 4), поэтому я понимаю большую часть теории, стоящей за всем этим. Что я хотел бы сейчас сделать, так это взять полученные знания и применить их на практике в виде небольших приложений.

Я читал некоторые статьи на MSDN о том, как это сделать, но они, кажется, охватывают только сетевое программирование на уровне 3 или 4 и выше, IIRC. То, что я ищу, - это несколько простых примеров того, как иметь дело со связью второго уровня (т. Е. Кадрированием) между хостами, или даже просто с чем-то простым, например, как выполнять широковещательную передачу Ethernet.

У меня небольшой опыт работы с C # и C ++, поэтому примеры, которые используют любой из этих языков, были бы хорошими.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 16 октября 2011

Для Windows взгляните на WinPcap , который обеспечивает низкоуровневый доступ к сети.Пакет разработчика уже содержит несколько простых примеров для начала работы.

Кстати, в Linux есть пакетные сокеты .

5 голосов
/ 16 октября 2011

Вы можете использовать Сетевую библиотеку eEx для написания небольших приложений (я делал то же самое во время CCNA).

Это простая в использовании и объектно-ориентированная библиотека программирования .Net, которая позволяет перейти на второй уровень и отправлять пользовательские кадры через WinPcap.

Реализуются такие типы фреймов, как Ethernet, ARP, IP, UDP, TCP и RIP, и, насколько я знаю, это протоколы, которые происходят во время CCNA.

Обучающие программы на C # доступны здесь , и если вы хотите взглянуть на что-то более глубокое, например, разрешение адресов, вы всегда можете взглянуть на исходный код, так как библиотека с открытым исходным кодом.

1 голос
/ 16 октября 2011

Очень вероятно, что вы могли бы изучить низкоуровневые сетевые утилиты в системах GNU / Linux или также изучить ядра TCP, UDP или IP. Но, например, вещание через Ethernet - это что-то очень низкое и не очень полезное. И реальные примеры (обычно написанные на C, а не C ++), вероятно, не могут быть простыми, потому что они имеют дело с обработкой ошибок.

...