Я хочу написать сканер портов на C # и не могу использовать SocketType.Raw, поскольку необработанные сокеты были извлечены из настольных версий Windows.Я не могу использовать SharpPcap или другую оболочку для Winpcap, так как я использую PPPoE для подключения к Интернету, а Winpcap не поддерживает устройства PPP.
Мне нужно использовать библиотеку, которая реализует необработанные сокеты и не полагается наwinpcap.
Есть идеи?В основном мне нужно отправить SYN, получить SYN / ACK или RST, но не отправлять ACK обратно.
edit:
Для людей, которые не верят, что сокеты 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
, например).