Использование сырых сокетов с C #

Я хочу написать сканер портов на C # и не могу использовать SocketType.Raw, так как сырые сокеты были удалены из настольных версий Windows . Я не могу использовать ни SharpPcap, ни другую оболочку для Winpcap, поскольку я использую PPPoE для подключения к Интернету, а Winpcap не поддерживает устройства PPP.

Мне нужно использовать библиотеку, которая реализует сырые сокеты и не полагается на winpcap.

Есть идеи? Обычно мне нужно отправлять SYN, получать SYN / ACK или RST, но не отправлять обратно ACK.

редактировать:

Для людей, которые не верят, что сокеты RAW исчезли из настольных версий Windows, см. Здесь: http://msdn.microsoft.com/en-us/library/windows/desktop /ms740548(v=vs.85).aspx

В Windows 7, Windows Vista, Windows XP с пакетом обновления 2 (SP2) и Windows XP с пакетом обновления 3 (SP3) возможность отправлять трафик через необработанные сокеты был ограничен несколькими способами:

  • Данные TCP не могут быть отправлены через необработанные сокеты.
  • Дейтаграммы UDP с недопустимым адресом источника не могут быть отправлены через необработанные сокеты. IP-адрес источника для любой исходящей дейтаграммы UDP должен существовать на сетевом интерфейсе, иначе дейтаграмма будет отброшена. Это изменение было внесено, чтобы ограничить способность вредоносного кода создавать распределенные атаки типа «отказ в обслуживании» и ограничить возможность отправки поддельных пакетов (пакетов TCP / IP с поддельным исходным IP-адресом).
  • Вызов функции bind с сырым сокетом для протокола IPPROTO_TCP не допускается.
    Примечание Функция bind с сырым сокетом разрешена для других протоколов ( IPPROTO_IP , IPPROTO_UDP или IPPROTO_SCTP , Например).

14
задан Mack 23 September 2011 в 19:58
поделиться