2017-03-17 8 views
2

私のネットワークに接続されているすべてのコンピュータの一覧を取得しようとしています。文字列からデータを分離する方法

しかし、私はIPアドレスのHostanmeを取得する必要があります。これは、MACアドレスのようないくつかのデータを含むString形式で保存されています。

私はjsonを使用しようとしましたが、文字列からIpのリストを取得できませんでした。 。私の文字列からのIPアドレスのリストだけforeachのを使用すると、私はその特定にホスト名を見つけることができるように

ここではコードです:

static void Main(String[] args) 
    { 
     Process arp = new Process(); 
     arp.StartInfo.UseShellExecute = false; 
     arp.StartInfo.RedirectStandardOutput = true; 
     arp.StartInfo.FileName = "C://Windows//System32//cmd.exe"; 
     arp.StartInfo.Arguments = "/c arp -a"; 
     arp.StartInfo.RedirectStandardOutput = true; 
     arp.Start(); 
     arp.WaitForExit(); 
     string output = arp.StandardOutput.ReadToEnd(); 
     Console.WriteLine(output); 

     Console.WriteLine(data.Internet_Address); 
     Console.ReadLine();    
    } 
} 

そして、ここでは、出力されます。

enter image description here

+0

画像の代わりにテキスト形式で入力と出力を追加してください。 – Adil

+0

これは(** data.Internet_Address **)はどこから来たのですか? –

+0

コマンドラインツールを呼び出して出力を解析する代わりに、この情報を直接取得できないのはなぜですか? –

答えて

1

あなたはRegex.Matches

var matches1 = Regex.Matches(output, @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");  
を使用してIPアドレスを抽出するために正規表現を使用することができます

最初のIPとして、あなたはそれをスキップする必要はないかもしれません。

for(int i=1; i < matches1.Count; i++) 
    Console.WriteLine("IPs " + i + "\t" + matches1[i].Value); 
+0

ありがとうございます!私はJsonを使用してハードを試していたし、Regexを使うことは決してなかった。 –

+0

あなたは大歓迎です。 – Adil

0

一般に、正規表現を使用してこのようなテキストを解析します。代わりに、同様の形式を解析するためにCSVライブラリを入手することもできます。これが単なるオフフックの場合は、String.Splitとなります。

var byLine = output.Split('\n') // split into lines 
    .Skip(1); // skip header 
var ips = byLine.Select(s => s.Split(' ')[0]); 

注:

  • それはおそらく、より良いあなたの代わりにローカルアドレスは、一般的に「ホスト名」を持っていない
  • コマンドラインツールを呼び出すの直接呼び出しで探している情報を得ることです。 Windowsマシン名はDNSエントリとして表示されている必要はありません。
関連する問題