ローカルネットワーク上のマシンのすべてのIPアドレスとホスト名を取得しようとしていますが、ローカルネットワークに接続された表示ボックス(BrightSignボックス)があり、そのボックスに関するすべての情報我々はそれのIPアドレスを見つけることができますが、ホスト名を取得することはできません。したがって、どのボックスにどのIPアドレスが割り当てられているのか判断できません。ここで我々はこのコードを使用している場合、我々はC#で `ローカルネットワーク上のすべてのマシン名が見つかりません
public void scan(string subnet)
{
Ping myping;
PingReply reply;
IPAddress addr;
IPHostEntry host;
for (int i = 1; i < 255; i++)
{
string subnetn = "." + i.ToString();
myping = new Ping();
//string data = "aa";
//byte[] buffer = Encoding.ASCII.GetBytes(data);
//PingOptions optionss = new PingOptions(64, true);
int timeout = 1000;
reply = myping.Send(subnet + subnetn);
if (reply.Status == IPStatus.Success)
{
try {
addr = IPAddress.Parse(subnet+subnetn);
host = Dns.GetHostEntry(addr);
txtHosts.AppendText(subnet + subnetn + host.HostName.ToString()+"\n");
}
catch {
}
}
}
}`
を使用したコード、システムを
;(しかし、我々は自動的に検出したい私たちは、独自のプログラムを使用して、ボックスのIPアドレスを学ぶことができます)すべてのIPを検出することができますが、ホスト名は電話と私が言及したボックスに属していません。 簡単に言うと、すべてのマシン名とIPアドレスをローカルネットワーク上に置く必要があります。 あなたは何が問題なのか、またこの問題を解決するために何ができるか考えていますか?我々はいくつかの研究を行い、いくつかの方法を試みた。私たちはホスト名を取ることができないipアドレスをpingしようとしました。マシンのttlが64に設定されていれば、ホスト名を取ることはできませんが、ttlが128ならホスト名を学ぶことができます。この挑戦をテストするために調整されたping設定が、私はまだ問題があります。
あなたのご意見をお待ちしております。 ありがとうございます。
あなたのIPルーティングテーブルにはある種のループが必要です。 TTLはTime-To-Liveの略語です。あなたのPingがルータまたはサーバを通過するたびに、ttlは1だけ減少します。ルータまたはサーバは、ttlがゼロになったときにIPを転送しません。だから地元のネットでは、あなたのTTLは決して~5以上であってはいけません。同じIPアドレスで2台のPC /ルーターが設定されているかもしれません。あなたのIPマスクが正しく設定されていない可能性があります。私はcmd.exeウィンドウを開いて手動でPingを実行します。 ttlを確認し、数字が小さくなっていることを確認してください。IPアドレスとホスト名の両方をピンに入れ、結果を比較してください。 – jdweng
x.x.x.x:bytes:32時間3ms ttl = 64、x.x.x.xのping統計:%0が失われ、往復の概算時間がミリ秒:最小:1ms、最大:3ms、平均= 1ms。 – arkbrk
ttlを64に設定し、ping応答が64と表示されている場合は、1ホップ(1つのサーバまたはルータ)を経由しています。 32、16、さらには8でも動作するはずです。32で動作しないと意味がありません。 ttlは問題とは関係ありません。失敗したときにttlを大きな値に設定すると、ルーティングループが作成されます。 – jdweng