Windows Mobile 6 - совет по .net Socket [Compact Framework 3.5] - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь открыть сокет, который будет принимать все пакеты, отправленные на устройство Windows Mobile через сеть Active Sync.

Я использую код из: CS Network Sniffer для Windows

В частности:

//For sniffing the socket to capture the packets has to be a raw socket, with the
//address family being of type internetwork, and protocol being IP
mainSocket = new Socket(AddressFamily.InterNetwork,
    SocketType.Raw, ProtocolType.IP);

//Bind the socket to All Network Communication
mainSocket.Bind(new IPEndPoint(IPAddress.Parse("169.254.2.1"), 0));

Я привязываюсь конкретно к настройке IP через Active Sync

И следующие параметры сокетов недоступны в Windows Mobile, есть ли другие варианты, которые можно использовать в Windows Mobile, чтобы получить тот же эффект? Список, который я видел в MSDN, мало чем помогает - msdn.microsoft.com/en-us/library/aa926870.aspx

//Set the socket  options
mainSocket.SetSocketOption(SocketOptionLevel.IP, //Applies only to IPv4 packets
                           SocketOptionName.HeaderIncluded, 
                           true);                           

byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
byte[] byOut = new byte[4] { 1, 0, 0, 0 };       //Capture outgoing packets

//Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
//IOControlCode.ReceiveAll is equivalent to SIO_RCVALL constant of Winsock 2
mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);

Наконец код для получения:

//Start receiving the packets asynchronously
mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
    new AsyncCallback(OnReceive), null);

Опять же, моя цель - получать все входящие пакеты на все порты для TCP и UDP на моем устройстве Windows Mobile через сеть Active Sync. Любая помощь, совет или код приветствуются, C #, VB.net, C ++ все хорошо :)

1 Ответ

0 голосов
/ 22 марта 2011

CE действительно не способен делать то, что вам нужно, на уровне сокетов. Вам гораздо лучше создать и установить Промежуточный драйвер NDIS , где вы можете проверять и обрабатывать все поступающие пакеты.

В качестве примечания следует отметить, что соединение ActiveSync не является сетевым соединением с полным подключением, а является частичным соединением RNDIS. Некоторые типы пакетов не пересылаются (например, ICMP).

Кроме того, не кодируйте адрес ActiveSync жестко - он изменился в прошлом и может в будущем. Вместо этого выполните разрешение DNS "ppp-peer", чтобы получить адрес.

...