Search
Categories
Articles
Rainmeter関連
ファイル置き場
お知り合いなど

スポンサーサイト

--.--.-- | スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Rainmeter-dev] ネットワークトラフィックの値がおかしい #3

2010.01.29 | Rainmeter-dev // Issue/ネットワーク関連

0 Comments

前回の記事 : [Rainmeter-dev] ネットワークトラフィックの値がおかしい #2

前回の記事では、ネットワークトラフィック値が本来の値の数倍になってしまう原因について調べました。
その中ではまとめとしてフィルタインタフェース(とループバック)を除外する対象としましたが、それだけだとXPの結果とは違い、論理インタフェースも集計対象になってしまうので、ここではXPでの列挙内容に近づけるために、物理(ハードウェア)インタフェースのみを集計対象とします。
(その他のインタフェースも、Interface=0での集計対象とならないだけで、個別指定をすれば値を取得できる)

Vista以降の環境で上記のような判定をするためには、GetIfTable2(GetIfTable2Ex) APIを使います。そのまま使うと2000/XPでRainmeterが起動できなくなるので、LoadLibrary/GetProcAddress APIを使って動的に使う必要があります。コード詳細は後回しにして、GetIfTable2Ex APIを使って取得した結果は以下のようになりました。

* NETWORK-INTERFACE: Count=32

1: AMD PCNET Family Ethernet Adapter (PCI) - VirtualBox Bridged Networking Driver Miniport
  Type=Other(1), Hardware=No, Filter=No
2: Intel(R) PRO/1000 MT Desktop Adapter - VirtualBox Bridged Networking Driver Miniport
  Type=Other(1), Hardware=No, Filter=No
3: WAN Miniport (IPv6)
  Type=Ethernet(6), Hardware=No, Filter=No
4: WAN Miniport (Network Monitor)
  Type=Ethernet(6), Hardware=No, Filter=No
5: AMD PCNET Family Ethernet Adapter (PCI) #2-agnitum firewall driver-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
6: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport
  Type=Ethernet(6), Hardware=No, Filter=Yes
7: WAN Miniport (IP)
  Type=Ethernet(6), Hardware=No, Filter=No
8: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-QoS Packet Scheduler-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
9: Intel(R) PRO/1000 MT Desktop Adapter
  Type=Ethernet(6), Hardware=Yes, Filter=No
10: AMD PCNET Family Ethernet Adapter (PCI)
  Type=Ethernet(6), Hardware=No, Filter=No
11: AMD PCNET Family Ethernet Adapter (PCI) #2
  Type=Ethernet(6), Hardware=Yes, Filter=No
12: WAN Miniport (IPv6)-agnitum firewall driver-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
13: WAN Miniport (IPv6)-QoS Packet Scheduler-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
14: WAN Miniport (IP)-agnitum firewall driver-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
15: WAN Miniport (IP)-QoS Packet Scheduler-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
16: WAN Miniport (Network Monitor)-agnitum firewall driver-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
17: WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
18: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-WFP LightWeight Filter-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
19: VirtualBox Host-Only Ethernet Adapter
  Type=Ethernet(6), Hardware=Yes, Filter=No
20: VirtualBox Host-Only Ethernet Adapter-agnitum firewall driver-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
21: VirtualBox Host-Only Ethernet Adapter-QoS Packet Scheduler-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
22: VirtualBox Host-Only Ethernet Adapter-WFP LightWeight Filter-0000
  Type=Ethernet(6), Hardware=No, Filter=Yes
23: WAN Miniport (PPPOE)
  Type=PPP(23), Hardware=No, Filter=No
24: RAS Async Adapter
  Type=PPP(23), Hardware=No, Filter=No
25: Software Loopback Interface 1
  Type=Loopback(24), Hardware=No, Filter=No
26: WAN Miniport (SSTP)
  Type=Tunnel(131), Hardware=No, Filter=No
27: WAN Miniport (IKEv2)
  Type=Tunnel(131), Hardware=No, Filter=No
28: WAN Miniport (L2TP)
  Type=Tunnel(131), Hardware=No, Filter=No
29: WAN Miniport (PPTP)
  Type=Tunnel(131), Hardware=No, Filter=No
30: Microsoft ISATAP Adapter
  Type=Tunnel(131), Hardware=No, Filter=No
31: Microsoft Teredo Tunneling Adapter
  Type=Tunnel(131), Hardware=No, Filter=No
32: Microsoft ISATAP Adapter #2
  Type=Tunnel(131), Hardware=No, Filter=No

太字にしたものがハードウェアインタフェースです。9番は既に取り外されているインタフェースで(状態を出力するとIfOperStatusNotPresentが返る)、11番は実際にネットワークにつながって通信可能なインタフェース、19番はVirtualBoxが作成したインタフェースです。
(10番も本来はHardware=Yesのはずですが、VMwareで何度も設定を変えて認識させているうちに#2ができたりして状態がおかしくなったのか、Noになっています。9番同様、取り外されているという認識になっているので、集計上は問題はなさそう)

この環境ではInterface=0で上記3つのインタフェースの合計値を出すことになりますが、9番は使われていないので0、19番はゲストOS側でこのインタフェースを使わない限りは0(?)と思われるので、実質11番のみの値が出力されることになります。問題となっていたフィルタインタフェースも集計されません。

※ "Hardware=No, Filter=No"な論理インタフェースについては不明な部分もあり、どうチェックしたらいいのかもわからないので、今回は足しこまないようにしてあります(論理インタフェースということは、結局は物理インタフェースのどれかを使って通信をしているのではとも考えられるので)。また、携帯電話デバイスが認識される環境もあるようですが、どういう風に認識しているのか謎です。

続きからはコード詳細。

続きを読む »

スポンサーサイト

[Rainmeter-dev] ネットワークトラフィックの値がおかしい #2

2010.01.25 | Rainmeter-dev // Issue/ネットワーク関連

0 Comments

前回の記事 : [Rainmeter-dev] ネットワークトラフィックの値がおかしい

前回の記事では、ざっくりとではありますがXPとVista/7での違いを調べました。

今回は、ネットワークトラフィックの値が2~数倍になってしまう原因について調べてみます。
まずはWindows7(on VMware)でのインタフェースの列挙の結果から。VirtualBoxをインストールしてあるので若干変わってます。

* NETWORK-INTERFACE: Count=32

1: AMD PCNET Family Ethernet Adapter (PCI) - VirtualBox Bridged Networking Driver Miniport
2: Intel(R) PRO/1000 MT Desktop Adapter - VirtualBox Bridged Networking Driver Miniport
3: WAN Miniport (IPv6)
4: WAN Miniport (Network Monitor)
5: AMD PCNET Family Ethernet Adapter (PCI) #2-agnitum firewall driver-0000
6: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport
7: WAN Miniport (IP)
8: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-QoS Packet Scheduler-0000
9: Intel(R) PRO/1000 MT Desktop Adapter
10: AMD PCNET Family Ethernet Adapter (PCI)
11: AMD PCNET Family Ethernet Adapter (PCI) #2
12: WAN Miniport (IPv6)-agnitum firewall driver-0000
13: WAN Miniport (IPv6)-QoS Packet Scheduler-0000
14: WAN Miniport (IP)-agnitum firewall driver-0000
15: WAN Miniport (IP)-QoS Packet Scheduler-0000
16: WAN Miniport (Network Monitor)-agnitum firewall driver-0000
17: WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000
18: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-WFP LightWeight Filter-0000
19: VirtualBox Host-Only Ethernet Adapter
20: VirtualBox Host-Only Ethernet Adapter-agnitum firewall driver-0000
21: VirtualBox Host-Only Ethernet Adapter-QoS Packet Scheduler-0000
22: VirtualBox Host-Only Ethernet Adapter-WFP LightWeight Filter-0000
23: WAN Miniport (PPPOE)
24: RAS Async Adapter
25: Software Loopback Interface 1
26: WAN Miniport (SSTP)
27: WAN Miniport (IKEv2)
28: WAN Miniport (L2TP)
29: WAN Miniport (PPTP)
30: Microsoft ISATAP Adapter
31: Microsoft Teredo Tunneling Adapter
32: Microsoft ISATAP Adapter #2

32個も列挙されました。
このうち、"AMD PCNET Family Ethernet Adapter (PCI) #2"が実際に通信に使われているNICになります。

次はRainmeter.iniに書き出されたStatsを見てみます。[Statistics]の値です。ここにはRainmeter起動中に行われたネットワークトラフィック量の累積値が書き出されています。
インタフェース32個分あるので、ちょっと長いです。

[Statistics]
Since=Sun Jan 24 00:01:00 2010
NetStatsCount=32

NetStatsInHigh1=0
NetStatsInLow1=0
NetStatsOutHigh1=0
NetStatsOutLow1=0
NetStatsInHigh2=0
NetStatsInLow2=0
NetStatsOutHigh2=0
NetStatsOutLow2=0
NetStatsInHigh3=0
NetStatsInLow3=0
NetStatsOutHigh3=0
NetStatsOutLow3=0
NetStatsInHigh4=0
NetStatsInLow4=0
NetStatsOutHigh4=0
NetStatsOutLow4=0
NetStatsInHigh5=0
NetStatsInLow5=335276
NetStatsOutHigh5=0
NetStatsOutLow5=84770
NetStatsInHigh6=0
NetStatsInLow6=335276
NetStatsOutHigh6=0
NetStatsOutLow6=84770
NetStatsInHigh7=0
NetStatsInLow7=0
NetStatsOutHigh7=0
NetStatsOutLow7=0
NetStatsInHigh8=0
NetStatsInLow8=335276
NetStatsOutHigh8=0
NetStatsOutLow8=84770
NetStatsInHigh9=0
NetStatsInLow9=0
NetStatsOutHigh9=0
NetStatsOutLow9=0
NetStatsInHigh10=0
NetStatsInLow10=0
NetStatsOutHigh10=0
NetStatsOutLow10=0
NetStatsInHigh11=0
NetStatsInLow11=335276
NetStatsOutHigh11=0
NetStatsOutLow11=84770
NetStatsInHigh12=0
NetStatsInLow12=0
NetStatsOutHigh12=0
NetStatsOutLow12=0
NetStatsInHigh13=0
NetStatsInLow13=0
NetStatsOutHigh13=0
NetStatsOutLow13=0
NetStatsInHigh14=0
NetStatsInLow14=0
NetStatsOutHigh14=0
NetStatsOutLow14=0
NetStatsInHigh15=0
NetStatsInLow15=0
NetStatsOutHigh15=0
NetStatsOutLow15=0
NetStatsInHigh16=0
NetStatsInLow16=0
NetStatsOutHigh16=0
NetStatsOutLow16=0
NetStatsInHigh17=0
NetStatsInLow17=0
NetStatsOutHigh17=0
NetStatsOutLow17=0
NetStatsInHigh18=0
NetStatsInLow18=335276
NetStatsOutHigh18=0
NetStatsOutLow18=84770
NetStatsInHigh19=0
NetStatsInLow19=0
NetStatsOutHigh19=0
NetStatsOutLow19=0
NetStatsInHigh20=0
NetStatsInLow20=0
NetStatsOutHigh20=0
NetStatsOutLow20=0
NetStatsInHigh21=0
NetStatsInLow21=0
NetStatsOutHigh21=0
NetStatsOutLow21=0
NetStatsInHigh22=0
NetStatsInLow22=0
NetStatsOutHigh22=0
NetStatsOutLow22=0
NetStatsInHigh23=0
NetStatsInLow23=0
NetStatsOutHigh23=0
NetStatsOutLow23=0
NetStatsInHigh24=0
NetStatsInLow24=0
NetStatsOutHigh24=0
NetStatsOutLow24=0
NetStatsInHigh25=0
NetStatsInLow25=0
NetStatsOutHigh25=0
NetStatsOutLow25=0
NetStatsInHigh26=0
NetStatsInLow26=0
NetStatsOutHigh26=0
NetStatsOutLow26=0
NetStatsInHigh27=0
NetStatsInLow27=0
NetStatsOutHigh27=0
NetStatsOutLow27=0
NetStatsInHigh28=0
NetStatsInLow28=0
NetStatsOutHigh28=0
NetStatsOutLow28=0
NetStatsInHigh29=0
NetStatsInLow29=0
NetStatsOutHigh29=0
NetStatsOutLow29=0
NetStatsInHigh30=0
NetStatsInLow30=0
NetStatsOutHigh30=0
NetStatsOutLow30=0
NetStatsInHigh31=0
NetStatsInLow31=0
NetStatsOutHigh31=0
NetStatsOutLow31=0
NetStatsInHigh32=0
NetStatsInLow32=0
NetStatsOutHigh32=0
NetStatsOutLow32=0

NetStatsOutHighが64ビット中の上位32ビット、NetStatsOutInが64ビット中の下位32ビットを表しています。内部では組み合わせて64ビット値として使われています。

この転送量を見てみると、値が書き出されているのは、「5, 6, 8, 11, 18」の5つです。また、その5つはどれも同じ転送量が記録されています。

インタフェース番号を元に、この5つの名称を抜き出してみると、

5: AMD PCNET Family Ethernet Adapter (PCI) #2-agnitum firewall driver-0000
6: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport
8: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-QoS Packet Scheduler-0000
11: AMD PCNET Family Ethernet Adapter (PCI) #2
18: AMD PCNET Family Ethernet Adapter (PCI) #2 - VirtualBox Bridged Networking Driver Miniport-WFP LightWeight Filter-0000

同じインタフェースでした。実際に使われているのは本体である11番のはずですが、他の4つからも同じ転送量が取れてしまっています。
こいつらはなんぞやというと、フィルタドライバです(入出力を横取りしてどうこうするもの?)。XPでは列挙されなかったこれらの値が全て加算され、この環境では5倍の値で表示されてしまうというわけです。

除外する対象は分かったものの、今までの方法では区別が付けられません。よって、Vista以降に用意された新しいAPIを使う必要があります。
次回はこのAPIを使って、インタフェースの種類をもう少し細かく振り分けてみます。

[Rainmeter-dev] ネットワークトラフィックの値がおかしい

2010.01.04 | Rainmeter-dev // Issue/ネットワーク関連

0 Comments

とりあえず、自分の環境でチェックした部分だけ。
デバイスマネージャの2つ目の表示は、事前に環境変数へ DEVMGR_SHOW_NONPRESENT_DEVICES = 1 と設定して、接続されていないものも表示するようにしてあります(薄く表示されているのがそれ)。

■Windows XPでの結果

デバイスマネージャでの認識 (1つ目が通常表示、2つ目が非表示デバイスも表示)

devmgr_xp_01 devmgr_xp_02

パフォーマンスモニタでの認識 (インスタンスの部分)

perfmon_xp

Rainmeterでの認識

DEBUG: (00:00:00.532) * NETWORK-INTERFACE: Count=2
DEBUG: (00:00:00.532) 1: Intel(R) PRO/100 S Desktop Adapter - Agnitum firewall miniport
DEBUG: (00:00:00.532) 2: MS TCP Loopback interface

Rainmeterでの認識 (上の詳細表示)

DEBUG: (00:00:00.188) * NETWORK-INTERFACE: Count=2
DEBUG: (00:00:00.188) 1: Intel(R) PRO/100 S Desktop Adapter - Agnitum firewall miniport
DEBUG: (00:00:00.188)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.188) 2: MS TCP Loopback interface
DEBUG: (00:00:00.188)   Type=Loopback(24), Stat=Operational(5)

どの結果を見ても、特に問題はなさそう。物理インタフェースのみが列挙され、論理インタフェースは列挙されない(ファイアウォールを入れているからか、デバイスマネージャでのドライバの見え方が違うのは仕方ないのかなぁ)。
この環境には存在しないけれど、もしかしたら、使っていたけど取り外された状態のインタフェースなんかも、Stat=Non-operationalとして列挙されるかもしれない。
("MS TCP Loopback interface"はその名の通りループバックインタフェースだけど、Rainmeterでは集計しないようにハードコーディングされている)

* * *

■Windows 7での結果

デバイスマネージャでの認識 (1つ目が通常表示、2つ目が非表示デバイスも表示)

devmgr_7_01 devmgr_7_02

パフォーマンスモニタでの認識 (インスタンスの部分)

perfmon_7

Rainmeterでの認識

DEBUG: (00:00:00.531) * NETWORK-INTERFACE: Count=20
DEBUG: (00:00:00.547) 1: WAN Miniport (IPv6)
DEBUG: (00:00:00.547) 2: WAN Miniport (Network Monitor)
DEBUG: (00:00:00.547) 3: AMD PCNET Family Ethernet Adapter (PCI) #2-QoS Packet Scheduler-0000
DEBUG: (00:00:00.547) 4: AMD PCNET Family Ethernet Adapter (PCI) #2-WFP LightWeight Filter-0000
DEBUG: (00:00:00.547) 5: WAN Miniport (IP)
DEBUG: (00:00:00.547) 6: WAN Miniport (IPv6)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.547) 7: Intel(R) PRO/1000 MT Desktop Adapter
DEBUG: (00:00:00.547) 8: AMD PCNET Family Ethernet Adapter (PCI)
DEBUG: (00:00:00.547) 9: AMD PCNET Family Ethernet Adapter (PCI) #2
DEBUG: (00:00:00.547) 10: WAN Miniport (IP)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.547) 11: WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.547) 12: WAN Miniport (PPPOE)
DEBUG: (00:00:00.547) 13: RAS Async Adapter
DEBUG: (00:00:00.562) 14: Software Loopback Interface 1
DEBUG: (00:00:00.562) 15: WAN Miniport (SSTP)
DEBUG: (00:00:00.562) 16: WAN Miniport (IKEv2)
DEBUG: (00:00:00.562) 17: WAN Miniport (L2TP)
DEBUG: (00:00:00.562) 18: WAN Miniport (PPTP)
DEBUG: (00:00:00.562) 19: Microsoft ISATAP Adapter
DEBUG: (00:00:00.562) 20: Microsoft Teredo Tunneling Adapter

Rainmeterでの認識 (上の詳細表示)

DEBUG: (00:00:00.297) * NETWORK-INTERFACE: Count=20
DEBUG: (00:00:00.297) 1: WAN Miniport (IPv6)
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 2: WAN Miniport (Network Monitor)
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 3: AMD PCNET Family Ethernet Adapter (PCI) #2-QoS Packet Scheduler-0000
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 4: AMD PCNET Family Ethernet Adapter (PCI) #2-WFP LightWeight Filter-0000
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 5: WAN Miniport (IP)
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 6: WAN Miniport (IPv6)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 7: Intel(R) PRO/1000 MT Desktop Adapter
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Non-operational(0)
DEBUG: (00:00:00.312) 8: AMD PCNET Family Ethernet Adapter (PCI)
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Non-operational(0)
DEBUG: (00:00:00.312) 9: AMD PCNET Family Ethernet Adapter (PCI) #2
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.312) 10: WAN Miniport (IP)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.312)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.328) 11: WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000
DEBUG: (00:00:00.328)   Type=Ethernet(6), Stat=Operational(5)
DEBUG: (00:00:00.328) 12: WAN Miniport (PPPOE)
DEBUG: (00:00:00.328)   Type=PPP(23), Stat=Operational(5)
DEBUG: (00:00:00.328) 13: RAS Async Adapter
DEBUG: (00:00:00.328)   Type=PPP(23), Stat=Operational(5)
DEBUG: (00:00:00.328) 14: Software Loopback Interface 1
DEBUG: (00:00:00.328)   Type=Loopback(24), Stat=Operational(5)
DEBUG: (00:00:00.328) 15: WAN Miniport (SSTP)
DEBUG: (00:00:00.328)   Type=Tunnel(131), Stat=Operational(5)
DEBUG: (00:00:00.328) 16: WAN Miniport (IKEv2)
DEBUG: (00:00:00.328)   Type=Tunnel(131), Stat=Non-operational(0)
DEBUG: (00:00:00.328) 17: WAN Miniport (L2TP)
DEBUG: (00:00:00.328)   Type=Tunnel(131), Stat=Operational(5)
DEBUG: (00:00:00.328) 18: WAN Miniport (PPTP)
DEBUG: (00:00:00.328)   Type=Tunnel(131), Stat=Operational(5)
DEBUG: (00:00:00.328) 19: Microsoft ISATAP Adapter
DEBUG: (00:00:00.328)   Type=Tunnel(131), Stat=Non-operational(0)
DEBUG: (00:00:00.328) 20: Microsoft Teredo Tunneling Adapter
DEBUG: (00:00:00.344)   Type=Tunnel(131), Stat=Non-operational(0)

どの結果もバラバラ。20個も認識されてればそりゃ値が大きくなってても不思議じゃない……。Rainmeterでの結果は、XP環境では物理インタフェースのみが列挙されていたけれど、Vista以降は論理インタフェースも列挙される仕様。細かく判断して振り分けるには、Vista以降に用意された新しいAPIを使う必要がありそう(上記のTypeとStatだけでは不要なものが多すぎる)。ただし、コードサンプルもあまりなくめんどくさい。

さて……この(Windows7の)結果の中で、"Interface=0"(全インタフェースの合計。デフォルト動作)としたときに、どれを含んで、どれを除外すべきでしょうか?
(デバイスマネージャで見えている "AMD PCNET Family Ethernet Adapter (PCI) #2" のみ?)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。