0

C#.Net でポートのプロセス ID を決定するプログラムを作成しています。

TcpTable を返す関数GetExtendedTcpTableがあります。IpHlpApi.dllテーブルを取得した後、行を反復処理してポート番号を解析しています。

ポート番号を比較するために、 を使用して 27144 ポート番号をネットワーク バイト オーダーに変換し、 を使用IPAddress.HostToNetworkOrderして他のポート番号と比較していMarshal.ReadInt32ます。比較がうまくいきません。つまり、一致する結果はありません。

を使用する代わりにIPAddress.HostToNetworkOrder、次のロジックを使用する場合

((27144 & 0xFF) << 8) + ((27144 & 0xFF00) >> 8) == Marshal.ReadInt32(portAddress)

プロセス ID、つまり結果の 1 つが一致するかどうかを判断できます。

なぜ機能しIPAddress.HostToNetworkOrderないのか教えてください。

4

1 に答える 1

2

おそらくDWORDfrom dwLocalPort/ dwRemotePortin TcpRowを使用しています。DWORD は確かに 16 ビットにはなりません。また、 IPAddress.HostToNetworkOrderの 32 ビット バージョンを呼び出す可能性があります。関数Int16を使用する前に、それを としてキャストするようにしてくださいIPAddress.HostToNetworkOrder

于 2013-02-15T07:04:17.740 に答える