Heim  >  Artikel  >  Java  >  Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

PHPz
PHPznach vorne
2023-05-08 23:28:241396Durchsuche

1. Einführung in die Intranet-Penetration

Verständnis aus der Perspektive einer Blackbox: Unabhängig davon, ob ein PC mit WLAN oder einem Netzwerkkabel verbunden ist, kann er normalerweise nicht direkt auf Ihr Netzwerk zugreifen Durch die Netzwerkdurchdringung können Computer in Ihrem LAN auf das externe Netzwerk zugreifen. Ein Beispiel: Wenn Sie einen Webdienst lokal ausführen und der belegte Port 8080 ist, dann lautet Ihr lokaler Test: //localhost:8080. Aber was ist, wenn Sie Ihre Dienste mit einem guten Freund teilen möchten? Ja, es geschieht durch Intranet-Penetration. Tatsächlich ist die Intranet-Penetration ein sehr komplizierter Vorgang. Die Erklärung in der Baidu-Enzyklopädie lautet:

Intranet-Penetration, d Portnummern werden vom NAT-Gerät nicht blockiert und korrekt an den Intranet-Host weitergeleitet.

Das kann ich hier natürlich nicht. Alles, was ich brauche, ist der Dienst, um über das externe Netzwerk auf das Intranet zuzugreifen. Der konkrete Prozess ist mir egal, ich muss nur dieses Ziel erreichen.

2. Konkrete Ideen und Umsetzungsdetails

2.1 Konkrete Ideen

Egal welche Methode zur Erreichung der Intranet-Penetration verwendet wird, ich verwende hier einen Alibaba Cloud Server. Das Folgende ist ein schematisches Diagramm der gesamten Simulation:

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

Hinweis:

1 Der Intranet-Penetrationsserver wird auf einem Computer mit einer öffentlichen IP bereitgestellt.

2. Intranet-Dienste und Intranet-Penetrations-Clients werden auf Intranet-Rechnern bereitgestellt.

Erklärung:

Meine Idee ist sehr einfach, das heißt, der Benutzer greift auf den Intranet-Penetrationsserver zu, und dann leitet der Intranet-Penetrationsserver die Anforderungsnachricht des Benutzers an den Intranet-Penetrations-Client und dann an das Intranet weiter Penetrationsserver Der Netzwerkpenetrationsclient leitet die Anforderungsnachricht an den Intranetdienst weiter, empfängt dann die Antwortnachricht vom Intranetdienst, leitet sie an den Intranetpenetrationsserver weiter und schließlich sendet der Intranetpenetrationsserver sie an den Benutzer weiter. Der allgemeine Prozess sieht folgendermaßen aus: Für externe Benutzer wird nur angenommen, dass sie auf einen externen Netzwerkdienst zugegriffen haben, da der Benutzer mit einem Black-Box-System konfrontiert ist.

2.2 Implementierungsdetails

Um das oben genannte Ziel zu erreichen, ist es am wichtigsten, eine lange Verbindung zwischen dem Intranet-Penetrations-Client und dem Intranet-Penetrationsserver aufrechtzuerhalten. Diese lange Verbindung muss ich verwenden, um Berichte von beiden auszutauschen Parteien. Textinformationen. Daher muss diese lange Verbindung nach dem Start des Systems hergestellt werden. Wenn eine Benutzeranforderung eingeht, empfängt der Intranet-Penetrationsserver die Anforderung und überträgt sie dann über die lange Verbindung an den Netzwerk-Penetrations-Client Verwendet diese Nachricht als Anforderung für den Zugriff auf den Intranetdienst, empfängt dann die Antwort vom Intranetdienst, leitet sie an den Intranet-Penetrationsserver weiter und leitet sie schließlich an den Benutzer weiter. 3. Code-Implementierung Es wird jedoch empfohlen, es in zwei Projekte aufzuteilen, da diese separat bereitgestellt werden müssen. Oder beim Exportieren in ein JAR-Paket wählen Sie einfach verschiedene Hauptklassen aus.

Client-Codedateien: Client.java, Connection.java, Msg.java, ProxyConnection.java.

Serverseitige Codedateien: Server.java, Connection.java, Msg.java, ProxyConnection.java. 3.2 Client-Klasse Webservice, hier verwende ich einen einfaches SpringBoot-Projekt mit nur drei Anforderungsmethoden.

package org.dragon;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 用于双向通信的客户端
 * */
public class Client {
	private static final String REMOTE_HOST = "公网IP";
	private static final String LOCAL_HOST = "127.0.0.1";
	public static void main(String[] args) {
		try {
			Socket proxy = new Socket(REMOTE_HOST, 10000);       
			System.out.println("Connect Server Successfully!");
			ProxyConnection proxyConnection = new ProxyConnection(proxy);  // 维持和内网穿透服务端的长连接
			// 可以实现同一个人多次访问
			while (true) {
				Msg msg = proxyConnection.receiveMsg();
				Connection connection = new Connection(new Socket(LOCAL_HOST, 8080));
				connection.sendMsg(msg);    // 将请求报文发送给内网服务器,即模拟发送请求报文
				msg = connection.receiveMsg();  // 接收内网服务器的响应报文
				proxyConnection.sendMsg(msg);  // 将内网服务器的响应报文转发给公网服务器(内网穿透服务端)
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

5. Test

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?5.1 Intranet-Test

Starten Sie den Intranet-Dienst und geben Sie zum Testen die folgenden drei URLs ein.


5.2 Externer Netzwerktest

Starten Sie den internen Netzwerkpenetrationsserver und den internen Netzwerkpenetrationsclient und greifen Sie dann im Browser auf die drei URLs zu. Hinweis: 1. Wenn Sie es selbst testen, können Sie zur IP-Adresse des von Ihnen ausgeführten Intranet-Penetrationsservers wechseln oder einen Domänennamen verwenden. 2. Der externe Netzwerkcomputer und der interne Netzwerkcomputer verwenden hier unterschiedliche Ports (verwenden Sie sie gelegentlich, solange es nicht zu Konflikten mit dem Service-Port auf Ihrem eigenen Computer kommt. Tatsächlich können Sie Port 80 im externen Netzwerk verwenden). was für normale Benutzer benutzerfreundlicher ist. 3. Der dritte Test ist tatsächlich fehlgeschlagen. Sie können die Ladeanimation oben sehen, die ständig geladen wird. Es liegt auf der Hand, dass dies bald aufhören sollte, aber es scheint unmöglich, es zu stoppen. Dies ist ein Systemfehler, aber aufgrund meines begrenzten Wissens werde ich ihn nicht beheben.

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

Wie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?

6. Hinweise

Der Code hier ist eine Simulation, er kann diese Funktion nur simulieren, hat aber im Grunde keine tatsächliche Wirkung, haha. Da ich hier nur eine lange Verbindung habe, kann ich nur die serielle Kommunikation unterstützen. Es scheint, dass die Anrufgeschwindigkeit nicht zu hoch sein kann. Ich habe über eine Möglichkeit nachgedacht, einen Verbindungspool zwischen dem Client und dem Server aufrechtzuerhalten, sodass ein Multithread-Zugriff erreicht werden kann. Hier gibt es keinen Umgang mit TCP-Paket-Sticking und Sub-Packaging (ich verstehe dieses Konzept, bin aber nicht sehr gut darin), daher verwende ich standardmäßig Anforderungs- und Antwortnachrichten mit einer Größe von maximal 2 KB. Das Überschreiten dieser Länge führt zwar zu Problemen, führt jedoch auch zu einer geringen Effizienz, wenn die meisten Pakete sehr klein sind. Diese Intranet-Durchdringung kann verschiedene Protokolle über TCP unterstützen, nicht unbedingt HTTP, zumindest theoretisch ist dies möglich.

Das obige ist der detaillierte Inhalt vonWie kann mithilfe der Java-Simulation eine Intranet-Penetration in die Black Box erreicht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen