Я хочу написать сканер портов в С#, и я не могу использовать SocketType.Raw, поскольку сырые сокеты были выведены из настольных версий окон. Я не могу использовать 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
, например).