Я хочу написать сканер портов на 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
, Например).