2016-05-16 23 views
0

ローカルネットワーク上のマシンのすべての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設定が、私はまだ問題があります。

あなたのご意見をお待ちしております。 ありがとうございます。

+0

あなたのIPルーティングテーブルにはある種のループが必要です。 TTLはTime-To-Liveの略語です。あなたのPingがルータまたはサーバを通過するたびに、ttlは1だけ減少します。ルータまたはサーバは、ttlがゼロになったときにIPを転送しません。だから地元のネットでは、あなたのTTLは決して~5以上であってはいけません。同じIPアドレスで2台のPC /ルーターが設定されているかもしれません。あなたのIPマスクが正しく設定されていない可能性があります。私はcmd.exeウィンドウを開いて手動でPingを実行します。 ttlを確認し、数字が小さくなっていることを確認してください。IPアドレスとホスト名の両方をピンに入れ、結果を比較してください。 – jdweng

+0

x.x.x.x:bytes:32時間3ms ttl = 64、x.x.x.xのping統計:%0が失われ、往復の概算時間がミリ秒:最小:1ms、最大:3ms、平均= 1ms。 – arkbrk

+0

ttlを64に設定し、ping応答が64と表示されている場合は、1ホップ(1つのサーバまたはルータ)を経由しています。 32、16、さらには8でも動作するはずです。32で動作しないと意味がありません。 ttlは問題とは関係ありません。失敗したときにttlを大きな値に設定すると、ルーティングループが作成されます。 – jdweng

答えて

0

マシン名にはDNSまたはNETBIOSなどがあります。私はあなたがNMAPをチェックアウトし、それが何ができるかを見ることをお勧めします。それをエミュレートしたい場合は、特定の要件について尋ねることができます。たとえば、DNS名を取得すると、DNSサーバーに照会することを意味します。コンピュータは、ICMP pingからの名前で応答しません。コンピュータのセキュリティ設定で許可されている場合は、NetBIOSクエリを実行するか、WMIを使用するか、ドメインにいる場合はドメインサーバーにクエリを実行します。

私はbrightsignが何であるかはわかりませんが、デバイスにはDNS名が必要であるという法律はなく、一部のアプライアンスではIPアドレスだけを使用しているという法律はありません。また、デバイスがpingや他のプロトコルに応答しなければならないという法律は存在しません。

+0

まず、情報をありがとう。私は自分自身をうまく説明できないと思う、このボックスのプログラムからホスト名とIPアドレスを得ることができる。 cmdを使用してpingを送信し、成功の結果を得ることができます。私たちは自動的にipとホスト情報を検出し、そのボックスにどのipアドレスが割り当てられているかを判断するプログラムを開発しています。たとえば、このボックスのホスト名は「BrightSign」で始まり、それを見ると、これはボックスであり、ボックスのIPアドレスであると言わなければなりません。しかし、私たちがcmdで送信するpingから成功の結果を得ることはできますが、C#ではこれを行うことはできません。 – arkbrk

+0

製造元、モデル、シリアル番号を含むMACアドレスを使用して、デバイスのタイプを判断することができます。 MACはPing(ARP応答)のリターンです。 ARP -Aと入力すると、cmd.exeウィンドウからARPテーブルを見ることができます。 – jdweng

+0

私はあなたが私の言ったことを理解しているか分かりません。DNSルックアップを実行してIPアドレスを取得してからpingを実行した場合、コードのように応答を取得しても、正しいデバイスにpingしていることは確認されません。これはCMDと変わりありません。 DNSが間違っていると、CMDにdnsアドレスをpingして、別のデバイスがそのIPアドレスを持っていると、デバイスにpingが成功したと表示します。 jdwengのアドバイスに従ってMACアドレスを使用すると、他の問題もあります。これはあなたが実現しているよりも複雑です。もう一度、NMAPをダウンロードして再生して、ポートスキャンの様子を確認することをお勧めします。 – tim

関連する問題