Чтение входящих пакетов с использованием необработанного сокета по протоколу IP в C # - PullRequest
3 голосов
/ 13 июня 2011

Я пытаюсь читать входящие пакеты в необработанном сокете с включенными заголовками. Глядя на другие проекты, такие как MJsniffer на CodeProject, я смог создать свой собственный код, чтобы читать все, что я хочу. Проблема: я только получаю информацию, которая является УТВЕРЖДАЮЩЕЙ. Вот мой код для инициализации необработанного сокета, код обработки на данном этапе не имеет значения ..

// Resolve the host name or IP address to am IPHostEntry instance
IPHostEntry hIPHostEntry = Dns.GetHostEntry( Dns.GetHostName());

// Initialize a new instance of the Socket class.
Socket hSocket = new Socket( AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified ); // IP is possible.

// Bind the socket to each resolved IP address.
foreach ( IPAddress hIPAddress in hIPHostEntry.AddressList ) try { hSocket.Bind( new IPEndPoint( hIPAddress, 0 )); } catch( Exception ) { continue; }

// Configure the incoming socket to accept all the required information.
hSocket.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true );

// Configure the incoming socket to receive all the required information.
hSocket.IOControl( IOControlCode.ReceiveAll, BitConverter.GetBytes( 1 ), BitConverter.GetBytes( 1 ));

// Return the configured socket.
return hSocket;

Под управлением Windows 7 64-разрядная, у меня есть полные права администратора, как я могу изменить этот код, чтобы получить сокет, способный читать входящие пакеты? Исходящий - это хорошо, и мне это тоже нужно, но мне также нужны входящие пакеты.

P.S .: Я не хочу заставлять пользователей устанавливать WinPcap. Я не хочу захватывать или подделывать или что-то еще, просто прочитайте, это ДОЛЖНО быть возможным ..

Ответы [ 2 ]

1 голос
/ 11 декабря 2012

Это может больше не помогать вам, но для кого-либо еще:

Потратив слишком много времени на самоанализ, я запустил исполняемый файл сам по себе, а не через Visual Studio.Входящий трафик, потрясающе!Затем я добавил VS debug .exe (MJSniff.vshost.exe) к разрешенным программам в моем брандмауэре, и теперь это работает.(Это всегда простые вещи ...)

Редактировать: кредит также на ответ здесь Джо Маттиони: Невозможно прочитать входящие ответы, используя необработанные сокеты

0 голосов
/ 13 июня 2011

В целях отладки вы пробовали связываться с IPAddress.Any вместо этого?Таким образом, вы будете иметь одну единственную привязку ко всем локальным интерфейсам.

Кроме того, если вы используете Receive() или ReceiveFrom(), для сокетов без установления соединения должно быть ReceivedFrom().

...