Вопрос по TDI-фильтру

Тема в разделе "WASM.NT.KERNEL", создана пользователем AlexCasual, 1 авг 2011.

  1. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ты копируешь адрес.

    В этой строчке будет ошибка доступа к памяти ибо контроль над I/O-пакетом утерян.
     
  2. maxxx777

    maxxx777 New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2011
    Сообщения:
    13
    x64
    Да, вы правы.
    В таком случае, можно отпустить пакет в этом месте:
    Address = TDI_data->in_addr;
    Port = TDI_data->sin_port;

    IoSkipCurrentIrpStackLocation(Irp);
    ntstatus = IoCallDriver(DeviceExtension->TopOfDeviceStack, Irp);


    data.address[0] = (( char *)& Address )[0];
    data.address[1] = (( char *)& Address )[1];
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, здесь можно.
     
  4. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Всем спасибо за участие,попробую переделать по рекомендациям х64 и отписать...
     
  5. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Вообще переписал весь код,а результат тот же...
    Код (Text):
    1. ....
    2. Сonnect_Request  = (PTDI_REQUEST_KERNEL_CONNECT)(&StackIrpPointer->Parameters);
    3.  
    4. Transport_Addrres = (PTRANSPORT_ADDRESS)(TDI_connectRequest->RequestConnectionInformation->RemoteAddress);
    5.  
    6. Ta_Address          = &(Transport_Addrres->Address[0]);
    7.        
    8. if(Ta_Address->AddressType == TDI_ADDRESS_TYPE_IP)
    9.  {
    10.     Ip_data = (PTDI_ADDRESS_IP)(&Ta_Address->Address[0]);
    11.          
    12.     Port      = Ip_data->sin_port;
    13.     Address = Ip_data->in_addr;
    14.          
    15.     port = (( char *)& port )[0] + (( char *)& port )[1];
    16.          
    17.    ip.address[0] = (( char *)& address )[0];
    18.    ip.address[1] = (( char *)& address )[1];
    19.    ip.address[2] = (( char *)& address )[2];
    20.    ip.address[3] = (( char *)& address )[3];
    21. .......
    Вывод всё тот же : port : 80(HTTP),ip : 123.321.0.0
    Может ли такое быть из-за того,что провайдер прокси ставит на соединение?
     
  6. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Вариант по рекомендации х64 :

    Код (Text):
    1.  if(StackIrpPointer->MinorFunction == TDI_CONNECT)
    2.    {
    3.  
    4.      TDI_connectRequest = (PTDI_REQUEST_KERNEL_CONNECT)(&StackIrpPointer->Parameters);
    5.      TDI_ipaddress      = (PTA_IP_ADDRESS)(TDI_connectRequest->RequestConnectionInformation->RemoteAddress);
    6.      
    7.      TDI_data = (PTDI_ADDRESS_IP)(&TDI_ipaddress->Address[0].Address[0]);
    8.      
    9.      port = TDI_data->sin_port;
    10.      address = TDI_data->in_addr;
    11.          
    12.      port = (( char *)& port )[0] + (( char *)& port )[1];
    13.          
    14.      data.address[0] = (( char *)& address )[0];
    15.      data.address[1] = (( char *)& address )[1];
    16.      data.address[2] = (( char *)& address )[2];
    17.      data.address[3] = (( char *)& address )[3];
    18.      
    19.      DbgPrint("type: %d\n",TDI_ipaddress->Address[0].AddressType);
    20.      DbgPrint("port: %d\n",port);
    21.      DbgPrint (" ADDRESS  %d.%d.%d.%d:%d \r\n",data.address[0],data.address[1],data.address[2],data.address[3]);
    22. }
    Вывод - type :2,port :80,ADDRESS:125.321.0.0
    Курю....................
     
  7. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    321 в char ни как не лезет, проверь размерности
     
  8. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Опечатка - type :2,port :80,ADDRESS:125.^132^.0.0
     
  9. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    кстати, тестишь на виртуалке ?

    у меня есть "горький" опыт
    http://wasm.ru/forum/viewtopic.php?id=36780

    тогда попробуй поставить бряк,
    Код (Text):
    1. __asm int 3 ;
    2. TDI_data = (PTDI_ADDRESS_IP)(&TDI_ipaddress->Address[0].Address[0]);
     
  10. AlexCasual

    AlexCasual New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    120
    Неа,тестирую на реальной машине...
     
  11. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    А твой фильтр вообще другие адреса-то какие-нибудь показывает? Проверь. Код, я ещё раз повторяю, вроде как правильный. Меня смущает только то, что лично я таких адресов у себя никогда не видел. Расскажи, что ли, про топологию сети и кто конкретно эти адреса использует, какой процесс, какая служба и т.п.