2009-04-28 5 views
1

Ich habe eine ASP.NET-Anwendung geschrieben, und in dieser Anwendung protokolliere ich die IP-Adresse der Anfrage. Und ich biete auch verschiedene Inhalte nach verschiedenen IP-Bereich.Testen der ASP.NET-Anwendung, die von der IP-Adresse abhängt

Meine Frage ist, in meiner begrenzten Testumgebung habe ich nur 5 Maschinen, jede Maschine hat nur 1 IP-Adresse, ich möchte vollständig über die Funktion meiner IP-Adresse ASP.NET testen, also in meiner Situation wie HTTP-Anfrage zu erstellen, die eine beliebige IP-Adresse jenseits der 5 IP-Adresse meiner Testgeräte enthält?

Lösung in .Net/C# wird geschätzt. Aber jedes vorhandene Werkzeug wird ebenfalls geschätzt.

EDIT1: Ich schreibe eine Schulbildung Web-Anwendung, die verschiedene Inhalte zu Studenten aus verschiedenen Städten dienen. Verschiedene Städte haben verschiedene Klassen/Seminare/Trainings und ich möchte den am meisten offenherzigen Inhalt nach der (Stellvertreter-) Adresse des Schulzweigs in einer bestimmten Stadt zeigen.

+0

Es könnte sich lohnen, einige Details hinzuzufügen, was die IP-Adressen Ihnen sagen? Ist das aus geografischen Gründen? das ist ok? Benutzeridentifikation? Nicht ok. – AnthonyWJones

+0

@Anthony: Ich würde nicht einmal aus geografischen Gründen sagen. Ich habe einmal britische IP-Adressen in den USA verwendet. Bei einem anderen Job wurde fast der gesamte Verkehr über das Land geroutet. Fügen Sie ein NAT auf der anderen Seite hinzu, und Georges Code wäre ziemlich verwirrt. –

+0

@AnthonyWJones, ich habe meine Geschäftsgründe hinzugefügt, wenn Sie einige gute Ideen zum Generieren unterschiedlicher IP-Adresse, um meine Testkosten kleiner zu machen, würde es geschätzt werden! – George2

Antwort

1

Die IP kommt von den TCP/IP-Headern, nicht vom "echten" Hauptteil der HTTP-Anfrage. Es ist also nicht trivial zu schmieden. Aber wenn Sie in einem LAN sind, können Sie einfach statische IPs zum Testen verwenden.

+0

@Matthew, tut mir leid, ich bin nicht in einem LAN. Die Website ist für einige verteilte Bereiche, und basierend auf den verschiedenen IP aus den verschiedenen Bereichen, die ich verschiedene Inhalte bedienen. Irgendwelche Ideen, um den Test einfach zu machen? – George2

+0

@ George2: Wenn Sie nicht in einem LAN sind, wie verbinden sich Ihre 5 Maschinen miteinander? – AnthonyWJones

+0

Mein schlechtes Englisch, ich meine derzeit meine 5 Maschinen sind aus dem gleichen LAN, aber ich möchte Szenarien testen, wenn Maschinen nicht in einem LAN sind, z. Eine Maschine, die aus England kommt, verbindet sich mit meinem Server in den USA. Irgendwelche Ideen. – George2

2

Sie sollten nicht von IP-Adressen abhängen. Wenn sich einer Ihrer Clients hinter einem Proxyserver oder einem Netzwerkadressentranslationsgerät befindet, wird der von Ihnen erwartete IP-Adressbereich nicht angezeigt. Selbst wenn Ihr aktuelles Netzwerk über keine solchen Geräte verfügt, macht es für Ihre Anwendung wenig Sinn, die Art und Weise zu beschränken, in der sich das Netzwerk in Zukunft ändern kann.

Sie sollten einen echten Authentifizierungsmechanismus verwenden, um festzustellen, wer Ihre Kunden wirklich sind. IP-Adressen sind explizit nicht zur Identifizierung von Computern vorgesehen.


EDIT als Antwort auf George bearbeiten.

Ihr Szenario ist eines in dem Sie definitiv nicht von IP-Adressen abhängen sollten. Sie möchten von der IP-Adresse als Stand-in für den geografischen Standort abhängig sein. Das ist nur faules Design. Die Tatsache, dass IP-Adressen indirekt mit dem geografischen Standort in Verbindung stehen, ist nichts anderes als ein Artefakt des Prozesses, dem sie (derzeit) zugewiesen sind.

Wenn der geografische Standort wichtig ist, sollten Ihre Clients dem Server mitteilen, wo sich der Standort befindet! Dann wird es immer genau sein, auch wenn sich das Netzwerk ändert.

+0

@John, ich stimme Ihren Punkten im Allgemeinen zu. Aber in meiner Situation Proxy ist in Ordnung, für den gleichen Proxy ich nur den gleichen Inhalt zurückgeben, und es ist von Entwurf. Übrigens: Können wir zu meiner ursprünglichen Frage kommen? Irgendwelche Ideen? :-) – George2

+0

@George: Hallo nochmal, und es ist nicht gut für ein Stück Software, die Netzwerkinfrastruktur so eng einzuschränken. Wenn Ihre Netzwerkbenutzer das Netzwerk für legitime Zwecke ändern möchten, funktioniert Ihre Software nicht mehr. Sie sollten die Ebene "Application" unabhängig von der Ebene "Network" beibehalten. Wie man es testet, würde das Testen der Einheit das meiste des Problems lösen. Probieren Sie außerdem virtuelle Maschinen aus, auf denen Sie das Netzwerk zwischen ihnen konstruieren können, wie Sie möchten. Sie können sogar reproduzieren, was mit Ihrem Code passiert, wenn sich das Netzwerk ändert. –

+0

Ich nehme an, er macht nur Geolocation. Z.B. Wenn Sie einen Kunden in Spanien bekommen, bieten Sie ihm standardmäßig eine Website in Spanisch an. Offensichtlich ist dies nicht sicher für die Authentifizierung. –

1

Spoofing IP-Adressen nicht möglich ist (oder zumindest nicht so einfach) in Fenstern wegen der Raw-Socket Einschränkungen .. usw.

Sie könnten hping Tool unter Linux verwenden oder WinPcap Bibliothek für Fenster zu erzeugen, rohe Päckchen, aber du wirst viel Zeit für nichts ausgeben.

Ich denke, der beste Weg ist, die IPs Ihrer 5 Maschinen manuell in verschiedene IPs (eine von jedem Bereich, den Sie verwenden) einzustellen.

+0

@Aziz, warum die Verwendung von winpcap zum Erzeugen eines Rohpakets "viel Zeit für nichts" kostet? – George2

+0

weil Sie Zeit damit verbringen, zu lernen, wie man es benutzt, und dann feststellen, dass es nur Ethernet-Layer-Pakete sendet, also müssen Sie IP, TCP und HTTP selbst implementieren! ... funktioniert einfach nicht :) – Aziz

4

Eine Möglichkeit besteht darin, Ihre Logik zu ändern, um die IP-Adresse oder den Header X-Forwarded-For zu sehen. Dieser Header wird oft verwendet, um die ursprüngliche IP-Adresse anzugeben, wenn eine Anfrage über einen Proxy-Server läuft. Während ja, müssen Sie hier keine Proxies berücksichtigen, aber dies zu tun wird Ihnen eine sehr, sehr einfache Möglichkeit geben, Ihre Logik zu testen.

Ich denke, dass dies Ihre schnellste Route sein wird, anstatt zu versuchen, IP-Adressen zu spoofen.

bearbeiten

 Uri uriObj = new Uri("http://localhost"); 
     HttpWebRequest request = 
     (HttpWebRequest)WebRequest.CreateDefault(uriObj); 

     request.Headers.Add("X-Forwarded-For", "125.125.125.125"); 

     WebResponse response = request.GetResponse(); 
     StreamReader reader = new StreamReader(response.GetResponseStream()); 
     Console.WriteLine(reader.ReadToEnd()); 

bearbeiten

Sie benötigen eine serverseitige Logik ändern aussehen:

string ip = Request.Headers.Get("X-Forwarded-For"); 
    if (string.IsNullOrEmpty(ip)) 
    { 
     ip = Request.UserHostAddress; 
    } 

Das sagt im Grunde, wenn der Header dann enthalten ist, verwenden die sonst die IP-Adresse benutzen, die sie mir sagen. Auf diese Weise werden sowohl Ihr Testcode als auch Ihre echten Benutzer erfasst.

+0

Cool, Josh! Irgendein .Net Beispielcode? – George2

+0

@Josh, ich habe mit X-Forwarded-For getestet funktioniert nicht. Was wir vom Server bekommen haben, ist die tatsächliche IP-Adresse des anfordernden Clients, nicht der Wert, den wir in Referer gesetzt haben. Hier ist mein Code auf ASP.Net Server-Seite verwendet. Irgendwelche Kommentare oder irgendetwas falsch? HttpContext.Current.Request.UserHostAddress – George2

1

Richten Sie Ihre Site in einem LAN ein, erstellen Sie virtuelle Maschinen und weisen Sie diesen Maschinen verschiedene statische IP-Adressen im LAN zu. Ändern Sie die IP-Bereiche in Ihrer App in die des LANs, stellen Sie sicher, dass sie funktionieren, und legen Sie die Bereiche in der Produktionsversion Ihrer App auf die gewünschten Werte fest. Sie sollten eine Entwicklungsversion der Website haben, und es gibt keinen Grund, der nicht auf einem LAN sein kann.

2

Hier bei der Arbeit verwenden wir virtuelle Maschinen. Sie können so viele IPs haben, wie Sie möchten. Sie sind mehrere Produkte herum. Wir verwenden meistens http://www.virtualbox.org/ (es ist kostenlos ... lol).

Erstellen Sie einfach einen und kopieren/einfügen. Konfigurieren Sie die festen ips. Und das ist es; Du kannst sogar alles auf demselben physischen PC testen!

Hoffe diese Hilfe ... :)

1

ooops. falsche Sachen

+0

falsch für was ?? :-) – George2

0

Vielleicht können Sie Ihre Logik testen, indem Sie einfach eine http "Referer" -Kopfzeile senden. Zum Beispiel:

Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("www.MySite.com") 
request.Referer = "http://1.2.3.4" 
Dim response As System.Net.HttpWebResponse = request.GetResponse() 
+0

Danke CB, du meinst eine beliebige IP Adresse im MyIpAddress Header? – George2

+0

Sie könnten auch die _location_ in eine Kopfzeile einfügen und überhaupt keine IP-Adressen verwenden ... –

+0

Ja. Sie können eine beliebige IP-Adresse in die Kopfzeile eingeben. – CB01

Verwandte Themen