.NET: условный сокет. Принять - PullRequest
0 голосов
/ 12 апреля 2009

Кажется, что нет никакого метода Socket или ListenSocket, который позволил бы мне условно принимать соединения.

Когда я получаю SYN, я хочу иметь возможность решить, хочу ли я это соединение в зависимости от источника, если я отправлю обратно SYN / ACK (принять соединение) или RST (принудительный отказ).

Есть ли желание этого достичь? К сожалению, я не могу просто сразу закрыть соединение после принятия, его вообще не нужно открывать. Я также хотел бы избежать работы с ним как с разъемом RAW.

Ответы [ 4 ]

1 голос
/ 12 апреля 2009

К сожалению, это невозможно. Нет никакого способа условно принять, используя соединение сокета TCP. Вы можете фильтровать соединение только после того, как оно установлено.

Но что именно вы пытаетесь отфильтровать? В тот момент, когда вы получаете пакет SYN, все, что вам известно, это IP-адрес источника и порт, к которому они пытаются подключиться. Кажется, что было бы намного лучше фильтровать на основе этих данных с помощью брандмауэра. Я понимаю, что это не контролируется вашим приложением, но это альтернатива для рассмотрения.

0 голосов
/ 05 апреля 2018

В Windows Vista появилась новая опция сокетов, которая позволяет это. Хотя нет стандартной библиотеки, которая поддерживает это.

https://msdn.microsoft.com/en-us/library/windows/desktop/dd264794(v=vs.85).aspx

http://www.winsocketdotnetworkprogramming.com/dotnetnetworkprogrammingsecurity13a.html

0 голосов
/ 12 апреля 2009

Поцарапайте это тоже. Windows XP SP2 и более поздние версии больше не поддерживают отправку пакетов TCP через сокеты RAW. Подробнее см. здесь .

0 голосов
/ 12 апреля 2009

Кажется, это невозможно без перехода в режим RAW. Как только сокет переходит в режим прослушивания Winsock, он будет принимать все и даже, даже ДО вызова Socket.Accept.

Вы должны использовать режим RAW и анализировать пакеты с вашим собственным стеком TCP, если вы хотите эту функцию.

...