Получение скорости инет соединения

Тема в разделе "WASM.NETWORKS", создана пользователем base64, 13 ноя 2004.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Я тут слепил программку, она для сетевой определяет отдельно (LAN)- тип интерфейса LOOPBACK, для модема тип PPP. У соседа попробовал (выделенная линия) - ETHERNET. И соответственно раздельные данные по разным типам выводятся. Причём без переключения на следующие 860
     
  2. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    ну дак исходники в студию! ( хотяб частично )
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Я его немного переделал, сейчас все типы не определяю, мне не надо :). Поэтому приаттачил первый вариант, в нем диалог немного коряво сделан, но информации больше извлекается



    Для разных типов интерфейса данные считываются вроде по одним и тем же адресам, ничего переключать не надо. Процедура расчёта времени коннекта есть тут же в топике (см.выше)



    Ещё бы приделать звонилку к этому...





    [​IMG] 575468384__InetInfo.zip
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Да, и bDescr тоже разные показывает значения для локальной и для модема
     
  5. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    ты меня не понял!

    допустим есть у человека lan + модемное соединение так вот lan будет показываться а модемное соединение - нет, а в возвращаемых данных процедуры GetIfTable после информации по lan идет инфрмация по модемному соединению, поэтому чтобы получить ее и надо add esi,860 а потом уже по [esi].dwType смотреть какой тип соединения нам нужен и на сколько я помню в первом dword esi в самом начале содержится количество интерфейсов, но я могу ошибаться. А вообще можно юзать еще и GetAdaptersInfo.
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Значит не понял. Получатся, что нужно одновременно и lan и модем показывать? Там будет какая-то инфа по модемному соединению или нули?

    Вроде пробовал добавить эти 860, но там дальше только нули были :dntknw:



    mov ebx, mInet

    add ebx,860

    assume ebx: PTR MIB_IFROW



    mov ebx, mInet

    add ebx,864

    assume ebx: PTR MIB_IFROW



    mov ebx, mInet

    add ebx,4

    assume ebx: PTR MIB_IFROW

    add ebx,860



    Эти три способа ничего не дали. Где там ещё может быть следующий интерфейс?
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Нашёл в чём дело: reqsize :)


    Код (Text):
    1.     LOCAL reqsize           :DWORD
    2.     LOCAL hInet             :DWORD
    3.     LOCAL mInet             :DWORD
    4.     LOCAL TypeCount         :DWORD
    5.  
    6.     mov reqsize,0
    7.     ;первый вызов с нулём, для определения необходимого размера памяти
    8.     invoke GetIfTable,mInet,ADDR reqsize,FALSE
    9.     invoke GlobalAlloc,GMEM_MOVEABLE,reqsize
    10.     mov hInet,eax
    11.     invoke GlobalLock,eax
    12.     mov mInet,eax
    13.     invoke GetIfTable,mInet,ADDR reqsize,FALSE
    14.  
    15.     mov ebx, mInet
    16.     mov eax,[ebx]
    17.     mov TypeCount, eax        ;кол-во типов интерфейсов
    18.     add ebx,4
    19.     mov eax,860
    20.     mov ecx,0                 ;zero-based индекс требуемого интерфейса
    21.     mul ecx
    22.     add ebx,eax               ;смещение на нужный кусок
    23.     assume ebx: PTR MIB_IFROW
    24.     ;далее все как например, в аттаче




    Почему-то GetIfTable возвращает только для одного, если передать указатель на кусок памяти, больший требуемого, например те же 20000 . Хотя и говорят, что запас ж... не е... но видимо не в данном случае.



    Переключая zero-based индекс (mov ecx,0) можно получить данные для любого из активных на данный момент интерфейсов, колич-во которых в TypeCount.



    А wszName так и повис...
     
  8. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    у меня все нормально возвращает .

    я поэтому и выделяю с запасом потому что у меня 2 сетевухи + модем + iEEE там всякие, тоесть когда мне надо узнать инфу по модему я смотрю скока всего интерфейсов и в цикле от 0 до кол-ва интерфейсов сравниваю dwType например с TYPE_PPP и если это так то прыгаю куда мне надо чтобы вывести по нему инфу а если нет то add esi,860 и снова сравниваю...
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    GetIfTable запрашивает памяти, достаточной для всех имеющихся устройств, хоть 1, хоть 4 устройства, поэтому нет смысла страховаться и выделять больше. Она сама скажет, сколько ей надо.
     
  10. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    не спорю :)

    просто ты сказал что у тебя
    а это не так.
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Ну не знаю, я специально дампил кусок 20000 байт после вызова GetIfTable, начиная с адреса возвращаемого GlobalLock. В первых 860 байтах была информация, дальше - одни нули до конца.

    Ну да ладно, вроде разобрались :)
     
  12. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    на моей машине GetIfTable выдает список из 4-х адаптеров.

    три из которых - MIB_IF_TYPE_ETHERNET и один MIB_IF_TYPE_LOOPBACK (ниже не показан).



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

    как видно ниже, они вообщем-то ничем не отличаются :dntknw:


    Код (Text):
    1.  
    2. wszName          :
    3. dwIndex          : 16777221
    4. dwType           : MIB_IF_TYPE_ETHERNET
    5. dwMtu            : 1500
    6. dwSpeed          : 100000000
    7. dwPhysAddrLen    : 6
    8. bPhysAddr        : 0x000EA6AE7DF8
    9. dwAdminStatus    : 0x00000001
    10. dwOperStatus     : MIB_IF_OPER_STATUS_OPERATIONAL
    11. dwLastChange     : 0xC025E719
    12. dwInOctets       : 33593642
    13. dwInUcastPkts    : 36113
    14. dwInNUCastPkts   : 2987
    15. dwInDiscards     : 0
    16. dwInErrors       : 0
    17. dwInUnknownProtos: 0
    18. dwOutOctets      : 3353905
    19. dwOutUCastPkts   : 28169
    20. dwOutNUCastPkts  : 31
    21. dwOutDiscards    : 0
    22. dwOutErrors      : 0
    23. dwOutQLen        : 0
    24. dwDescrLen       : 39
    25. bDescr           : Intel(R) PRO/100 VE Network Connection
    26.  
    27. ===============================================
    28.  
    29. wszName          :
    30. dwIndex          : 3
    31. dwType           : MIB_IF_TYPE_ETHERNET
    32. dwMtu            : 1500
    33. dwSpeed          : 100000000
    34. dwPhysAddrLen    : 6
    35. bPhysAddr        : 0x005056C00001
    36. dwAdminStatus    : 0x00000001
    37. dwOperStatus     : MIB_IF_OPER_STATUS_OPERATIONAL
    38. dwLastChange     : 0xC025E714
    39. dwInOctets       : 24113
    40. dwInUcastPkts    : 0
    41. dwInNUCastPkts   : 226
    42. dwInDiscards     : 0
    43. dwInErrors       : 0
    44. dwInUnknownProtos: 0
    45. dwOutOctets      : 27277
    46. dwOutUCastPkts   : 0
    47. dwOutNUCastPkts  : 226
    48. dwOutDiscards    : 0
    49. dwOutErrors      : 0
    50. dwOutQLen        : 0
    51. dwDescrLen       : 31
    52. bDescr           : VMware Virtual Ethernet Adapter
    53.  
    54. ===============================================
    55.  
    56. wszName          :
    57. dwIndex          : 2
    58. dwType           : MIB_IF_TYPE_ETHERNET
    59. dwMtu            : 1500
    60. dwSpeed          : 100000000
    61. dwPhysAddrLen    : 6
    62. bPhysAddr        : 0x005056C00008
    63. dwAdminStatus    : 0x00000001
    64. dwOperStatus     : MIB_IF_OPER_STATUS_OPERATIONAL
    65. dwLastChange     : 0xC025E714
    66. dwInOctets       : 23645
    67. dwInUcastPkts    : 0
    68. dwInNUCastPkts   : 220
    69. dwInDiscards     : 0
    70. dwInErrors       : 0
    71. dwInUnknownProtos: 0
    72. dwOutOctets      : 26725
    73. dwOutUCastPkts   : 0
    74. dwOutNUCastPkts  : 220
    75. dwOutDiscards    : 0
    76. dwOutErrors      : 0
    77. dwOutQLen        : 0
    78. dwDescrLen       : 31
    79. bDescr           : VMware Virtual Ethernet Adapter
    80.  
     
  13. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    есть еще функция GetAdaptersInfo - она выдает список РЕАЛЬНО существующих адаптеров,кстати по ней можно получить ip адрес, а дальше уже допустим можно сравнивать имена интерфейсов и определять что к какому относится, хотя это мне кажется немного неправильным и геморойным, но хоть как то...
     
  14. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    BLOWFISH

    есть еще функция GetAdaptersInfo - она выдает список РЕАЛЬНО существующих адаптеров



    наконец, дошли руки проверить...

    так вот нифига - виртуальные адаптеры тоже в списке (лог ниже).

    единственное отличие, что она не выдает loopback-интерфейс


    Код (Text):
    1.  
    2. ComboIndex          : 0
    3. AdapterName         : {DEFC7AF4-F363-400F-982D-F2E48023EF0F}
    4. Description         : Intel(R) PRO/100 VE Network Connection
    5. AddressLength       : 6
    6. Address             : 0x000EA6AE7DF8
    7. Index               : 16777221
    8. Type                : MIB_IF_TYPE_ETHERNET
    9. DhcpEnabled         : 1
    10. CurrentIpAddress    : 0x00000000
    11. IpAddressList      ...
    12.    IpAddress        : 192.168.1.32
    13.    IpMask           : 255.255.255.0
    14.    Context          : 0x00000004
    15. GatewayList        ...
    16.    IpAddress        :
    17.    IpMask           :
    18.    Context          : 0x00000000
    19. DhcpServer         ...
    20.    IpAddress        : 192.168.1.1
    21.    IpMask           :
    22.    Context          : 0x00000000
    23. HaveWins            : 1
    24. PrimaryWinsServer  ...
    25.    IpAddress        : 192.168.1.1
    26.    IpMask           : 0.0.0.0
    27.    Context          : 0x00000000
    28. SecondaryWinsServer...
    29.    IpAddress        : 0.0.0.0
    30.    IpMask           : 0.0.0.0
    31.    Context          : 0x00000000
    32. LeaseObtained       : 0x41AC5406
    33. LeaseExpires        : 0x41B6E006
    34.  
    35. ===========================================
    36.  
    37. ComboIndex          : 1
    38. AdapterName         : {2CA2376F-F602-4A6B-B0E7-CEE259A4A5C3}
    39. Description         : VMware Virtual Ethernet Adapter
    40. AddressLength       : 6
    41. Address             : 0x005056C00001
    42. Index               : 3
    43. Type                : MIB_IF_TYPE_ETHERNET
    44. DhcpEnabled         : 0
    45. CurrentIpAddress    : 0x00000000
    46. IpAddressList      ...
    47.    IpAddress        : 192.168.50.1
    48.    IpMask           : 255.255.255.0
    49.    Context          : 0x00000003
    50. GatewayList        ...
    51.    IpAddress        :
    52.    IpMask           :
    53.    Context          : 0x00000000
    54. DhcpServer         ...
    55.    IpAddress        : 255.255.255.255
    56.    IpMask           :
    57.    Context          : 0x00000000
    58. HaveWins            : 0
    59. PrimaryWinsServer  ...
    60.    IpAddress        : 0.0.0.0
    61.    IpMask           : 0.0.0.0
    62.    Context          : 0x00000000
    63. SecondaryWinsServer...
    64.    IpAddress        : 0.0.0.0
    65.    IpMask           : 0.0.0.0
    66.    Context          : 0x00000000
    67. LeaseObtained       : 0x00000000
    68. LeaseExpires        : 0x00000000
    69.  
    70. ===========================================
    71.  
    72. ComboIndex          : 2
    73. AdapterName         : {EE3CC4AD-FEC6-4B56-8FD6-8BECBEE12BCA}
    74. Description         : VMware Virtual Ethernet Adapter
    75. AddressLength       : 6
    76. Address             : 0x005056C00008
    77. Index               : 2
    78. Type                : MIB_IF_TYPE_ETHERNET
    79. DhcpEnabled         : 0
    80. CurrentIpAddress    : 0x00000000
    81. IpAddressList      ...
    82.    IpAddress        : 192.168.220.1
    83.    IpMask           : 255.255.255.0
    84.    Context          : 0x00000002
    85. GatewayList        ...
    86.    IpAddress        :
    87.    IpMask           :
    88.    Context          : 0x00000000
    89. DhcpServer         ...
    90.    IpAddress        : 255.255.255.255
    91.    IpMask           :
    92.    Context          : 0x00000000
    93. HaveWins            : 0
    94. PrimaryWinsServer  ...
    95.    IpAddress        : 0.0.0.0
    96.    IpMask           : 0.0.0.0
    97.    Context          : 0x00000000
    98. SecondaryWinsServer...
    99.    IpAddress        : 0.0.0.0
    100.    IpMask           : 0.0.0.0
    101.    Context          : 0x00000000
    102. LeaseObtained       : 0x00000000
    103. LeaseExpires        : 0x00000000
    104.  
     
  15. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    сорри что поднял старую тему... хотелось бы узнать - есть ли способ определить, какой адаптер используется для подключения к интернет? ведь не все же используют РРР