2017-03-17 60 views
2

我想要獲取我的網絡上連接的所有計算機的列表,並且我能夠這樣做。如何從字符串中分離數據

但是,然後我需要獲取我以String格式存儲的Ip地址的Hostanme以及其他一些數據,例如mac地址。

我嘗試過使用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

您可以使用正則表達式使用提取的IP Regex.Matches

var matches1 = Regex.Matches(output, @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");  

作爲您可能不需要的第一個IP,您可以跳過它。

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

非常感謝!它工作的Adil我努力使用Json,它從來沒有打我使用正則表達式 –

+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條目可見。
相關問題