2016-04-11 15 views
1

ich auf einer Anwendung arbeite, die eine Reihe von Druckern aus einer Textdatei geladen:Suche nach dem nächsten Drucker an den Client im Netzwerk

protected void LoadPrinterList() 
    { 

     string CSVFilePathName = System.Configuration.ConfigurationManager.AppSettings["FilePath"]; 
     string[] Lines = File.ReadAllLines(CSVFilePathName); 
     string[] Fields; 
     Fields = Lines[0].Split(new char[] { ',' }); 
     int Cols = Fields.GetLength(0); 
     DataTable dt = new DataTable(); 
     //1st row must be column names; force lower case to ensure matching later on. 
     for (int i = 0; i < Cols; i++) 
      dt.Columns.Add(Fields[i].ToLower(), typeof(string)); 
     dt.Columns.Add("nameanddescription", typeof(string), "name +'-'+ description"); 
     dt.Columns.Add("ipandconnectionstring", typeof(string), "ip +'-'+ ConncetionStringID"); 
     DataRow Row; 
     for (int i = 1; i < Lines.GetLength(0); i++) 
     { 
      Fields = Lines[i].Split(new char[] { ',' }); 
      Row = dt.NewRow(); 
      for (int f = 0; f < Cols; f++) 
       Row[f] = Fields[f]; 
      dt.Rows.Add(Row); 
     } 

     string hostname = Request.UserHostName.Substring(0, 3); 
     string[] name = Printerlist.SelectedValue.Split('-'); 
     //string plant = name[0].ToString(); 
     //string plantvalue = plant.Substring(0, 3); 
     //if(hostname == plantvalue) 
     //{ 
     Printerlist.DataTextField = "nameanddescription"; 
     Printerlist.DataValueField = "ipandconnectionstring"; 
     //} 
     Printerlist.DataSource = dt; 
     Printerlist.DataBind(); 


    } 

Das Problem ist, die meisten dieser Drucker in der Anlage sind und ich muß die nächsten Etikettendrucker an den Client finden, ich bin in der Lage, die Kundeninformationen zu erhalten:

public static string DetermineCompName(string IP) 
    { 
     IPAddress myIP = IPAddress.Parse(IP); 
     IPHostEntry GetIPHost = Dns.GetHostEntry(myIP); 
     List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList(); 
     return compName.First(); 
    } 

string IP = Request.UserHostName; 
string compName = CompNameHelper.DetermineCompName(IP); 

ich habe auch die IP-Adresse von jedem des Druckers, weil ich die IP-Adresse drucken. Meine Frage ist, wie kann ich basierend auf der IP des Clients und der IP des Druckers den nächstgelegenen finden?

Gibt es eine alternative Problemumgehung? Ich habe viel online gesucht, konnte aber nicht genug Informationen dazu finden.

+1

einfache Antwort - Sie können nicht, in der Regel gibt es keine Beziehung zwischen Entfernung und IP-Adresse, vor allem im internen LAN –

+0

Die einzige mögliche Sache, die ich hier denken könnte, ist jedes Mal ping und dann den Durchschnitt von allen die pings, und dann, was auch immer der niedrigste ist, können Sie schätzen, dass man am nächsten ist, aber wahrscheinlich immer fast immer falsch. – pay

+0

Ich bezweifle, es wird ein Weg sein, dies zu tun http://superuser.com/questions/ 327417/is-it-possible-find-a-printers-physisch-location-in-building-by-its-ip-adr –

Antwort

0

In einem Unternehmensnetzwerk können Switches so gepolt werden, dass sie Geräte mit Ports mit einem bekannten Standort verknüpfen. Ich habe Dutzende von Netzwerken unterstützt und es nie mit den von Ihnen gewünschten Details gemacht. Theoretisch könnte man allerdings, wenn die Netzwerkunterstützung eine aktualisierte Aufzeichnung darüber haben könnte, welche Switch-Ports zu welchen Wand-Ports gehen. Normalerweise befinden sich Drucker nur an wenigen Stellen auf einer Ebene und Sie haben ein Subnetz pro Ebene. Viele Netzwerke haben einen Hinweis auf ihren Namen oder eine Beschreibung, wo sie sich befinden.

Alternativ, wenn dies nicht nur Tagträumen ist und Sie es wirklich brauchen, würde ich auf ein separates Standort bewusst System wie RFID-Asset-Tracking oder auch nur alle Drucker WLAN verwenden. Enterprise Wifi-Arrays können Gerätepositionen schätzen (ich weiß, Xirrus kann dies tun und es funktioniert gut genug für den nächstgelegenen Drucker). EDIT: und dann um den Standort des Geräts zu erhalten, verwenden Sie eine SNMP-Abfrage auf dem WLAN-Array.