Browse Source

JLAN seems to work, now some testing :)

Alexander Brakowski 9 years ago
parent
commit
ab4a6f43d3

+ 2 - 1
build.gradle

@@ -24,7 +24,8 @@ dependencies {
     compile files('libs/swipelistview-1.0.jar')
     compile files('libs/swipelistview-1.0.jar')
     compile files('libs/sshlib-v1.1.jar')
     compile files('libs/sshlib-v1.1.jar')
     compile files('libs/chart-library2.2.jar')
     compile files('libs/chart-library2.2.jar')
-    compile files('libs/jlan-5.jar')
+    //compile files('libs/jlan-5.jar')
+    compile files('libs/alfresco-jlan.jar')
 }
 }
 
 
 android {
 android {

BIN
libs/alfresco-jlan.jar


+ 50 - 0
res/raw/jlan_config.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" standalone="no"?>
+<!-- <!DOCTYPE jlanserver SYSTEM "jlanserver.dtd"> -->
+
+<jlanserver>
+    <servers>
+        <SMB/>
+    </servers>
+
+    <SMB>
+        <host name="JLANSRV" domain="ALFRESCO">
+            <broadcast>255.255.255.255</broadcast>
+            <smbdialects>LanMan,NT</smbdialects>
+            <comment>Alfresco JLAN Server</comment>
+
+            <!-- To run the server using a non-root account on linux, Mac OS X, Solaris -->
+            <netBIOSSMB sessionPort="28276" namingPort="28274" datagramPort="28275"/>
+            <tcpipSMB port="28582"/>
+
+
+            <hostAnnounce interval="5"/>
+        </host>
+        <sessionDebug flags="Negotiate,Socket,Tree"/>
+        <netbiosDebug/>
+        <announceDebug/>
+    </SMB>
+
+    <debug>
+        <output>
+            <class>org.alfresco.jlan.debug.ConsoleDebug</class>
+            <append/>
+        </output>
+    </debug>
+
+    <shares>
+        <diskshare name="JLAN" comment="Test share">
+            <driver>
+                <class>org.alfresco.jlan.smb.server.disk.JavaFileDiskDriver</class>
+                <LocalPath>.</LocalPath>
+            </driver>
+        </diskshare>
+    </shares>
+
+    <security>
+        <authenticator>
+            <class>org.alfresco.jlan.server.auth.DefaultAuthenticator</class>
+            <mode>GUEST</mode>
+            <allowGuest/>
+        </authenticator>
+    </security>
+</jlanserver>

+ 0 - 5
src/de/tudarmstadt/informatik/hostage/Handler.java

@@ -84,11 +84,6 @@ public class Handler implements Runnable {
 			((GHOST) protocol).setCurrentPort(listener.getPort());
 			((GHOST) protocol).setCurrentPort(listener.getPort());
 		}
 		}
 
 
-        if(protocol.toString().equals("CIFS")){
-            ((CIFS) protocol).initialize(this);
-
-        }
-
 		this.client = client;
 		this.client = client;
 		this.thread = new Thread(this);
 		this.thread = new Thread(this);
 		pref = PreferenceManager.getDefaultSharedPreferences(service);
 		pref = PreferenceManager.getDefaultSharedPreferences(service);

+ 11 - 2
src/de/tudarmstadt/informatik/hostage/Listener.java

@@ -22,6 +22,7 @@ import de.tudarmstadt.informatik.hostage.logging.AttackRecord;
 import de.tudarmstadt.informatik.hostage.logging.Logger;
 import de.tudarmstadt.informatik.hostage.logging.Logger;
 import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
 import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
 import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
 import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
+import de.tudarmstadt.informatik.hostage.protocol.CIFS;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.SMB;
 import de.tudarmstadt.informatik.hostage.protocol.SMB;
 import de.tudarmstadt.informatik.hostage.protocol.SSLProtocol;
 import de.tudarmstadt.informatik.hostage.protocol.SSLProtocol;
@@ -122,6 +123,8 @@ public class Listener implements Runnable {
 
 
 	@Override
 	@Override
 	public void run() {
 	public void run() {
+        if(protocol.toString().equals("CIFS")) return;
+
 		while (!thread.isInterrupted()) {
 		while (!thread.isInterrupted()) {
 			addHandler();
 			addHandler();
 		}
 		}
@@ -139,6 +142,12 @@ public class Listener implements Runnable {
 		if (protocol.toString().equals("SMB")) {
 		if (protocol.toString().equals("SMB")) {
 			return false; // disable smb for the moment to prevent crashes
 			return false; // disable smb for the moment to prevent crashes
 		}
 		}
+
+        if(protocol.toString().equals("CIFS")){
+            System.out.println("PROTOCOL: " + protocol);
+            ((CIFS) protocol).initialize(this);
+        }
+
 		try {
 		try {
 			server = new MyServerSocketFactory().createServerSocket(port);
 			server = new MyServerSocketFactory().createServerSocket(port);
 			if (server == null)
 			if (server == null)
@@ -238,7 +247,7 @@ public class Listener implements Runnable {
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
 	private void startHandler(Socket client) throws Exception {
 	private void startHandler(Socket client) throws Exception {
-		handlers.add(newInstance(service, this, protocol.getClass().newInstance(), client));
+		handlers.add(newInstance(service, this, protocol.toString().equals("CIFS") ? protocol : protocol.getClass().newInstance(), client));
 	}
 	}
 
 
 	/**
 	/**
@@ -253,7 +262,7 @@ public class Listener implements Runnable {
 		SSLSocketFactory factory = sslContext.getSocketFactory();
 		SSLSocketFactory factory = sslContext.getSocketFactory();
 		SSLSocket sslClient = (SSLSocket) factory.createSocket(client, null, client.getPort(), false);
 		SSLSocket sslClient = (SSLSocket) factory.createSocket(client, null, client.getPort(), false);
 		sslClient.setUseClientMode(false);
 		sslClient.setUseClientMode(false);
-		handlers.add(newInstance(service, this, protocol.getClass().newInstance(), sslClient));
+		handlers.add(newInstance(service, this, protocol.toString().equals("CIFS") ? protocol : protocol.getClass().newInstance(), sslClient));
 	}	
 	}	
 	
 	
 	/**
 	/**

+ 33 - 57
src/de/tudarmstadt/informatik/hostage/protocol/CIFS.java

@@ -1,89 +1,53 @@
 package de.tudarmstadt.informatik.hostage.protocol;
 package de.tudarmstadt.informatik.hostage.protocol;
 
 
 
 
-import org.alfresco.config.ConfigElement;
-import org.alfresco.jlan.debug.ConsoleDebug;
-import org.alfresco.jlan.debug.DebugConfigSection;
+import android.content.Context;
+import android.net.DhcpInfo;
+import android.net.wifi.WifiManager;
+
+import org.alfresco.jlan.app.CifsOnlyXMLServerConfiguration;
 import org.alfresco.jlan.server.SessionListener;
 import org.alfresco.jlan.server.SessionListener;
 import org.alfresco.jlan.server.SrvSession;
 import org.alfresco.jlan.server.SrvSession;
-import org.alfresco.jlan.server.auth.CifsAuthenticator;
-import org.alfresco.jlan.server.auth.DefaultAuthenticator;
-import org.alfresco.jlan.server.config.CoreServerConfigSection;
-import org.alfresco.jlan.server.config.GlobalConfigSection;
 import org.alfresco.jlan.server.config.InvalidConfigurationException;
 import org.alfresco.jlan.server.config.InvalidConfigurationException;
-import org.alfresco.jlan.server.config.SecurityConfigSection;
-import org.alfresco.jlan.server.config.ServerConfiguration;
-import org.alfresco.jlan.server.core.DeviceContextException;
-import org.alfresco.jlan.server.filesys.DiskDeviceContext;
-import org.alfresco.jlan.server.filesys.DiskInterface;
-import org.alfresco.jlan.server.filesys.DiskSharedDevice;
 import org.alfresco.jlan.server.filesys.FileListener;
 import org.alfresco.jlan.server.filesys.FileListener;
-import org.alfresco.jlan.server.filesys.FilesystemsConfigSection;
 import org.alfresco.jlan.server.filesys.NetworkFile;
 import org.alfresco.jlan.server.filesys.NetworkFile;
 import org.alfresco.jlan.smb.server.CIFSConfigSection;
 import org.alfresco.jlan.smb.server.CIFSConfigSection;
 import org.alfresco.jlan.smb.server.SMBServer;
 import org.alfresco.jlan.smb.server.SMBServer;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
 import java.util.List;
 import java.util.List;
 
 
-import de.tudarmstadt.informatik.hostage.Handler;
-import de.tudarmstadt.informatik.hostage.protocol.cifs.PseudoCIFSDiskDriver;
+import de.tudarmstadt.informatik.hostage.Listener;
+import de.tudarmstadt.informatik.hostage.R;
+import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 import de.tudarmstadt.informatik.hostage.wrapper.Packet;
 import de.tudarmstadt.informatik.hostage.wrapper.Packet;
 
 
 public class CIFS implements Protocol, SessionListener, FileListener {
 public class CIFS implements Protocol, SessionListener, FileListener {
-    private Handler mHandler;
+    private Listener mHandler;
     private SMBServer mSmbServer;
     private SMBServer mSmbServer;
 
 
-    public void initialize(Handler mHandler) {
+    public void initialize(Listener mHandler) {
         this.mHandler = mHandler;
         this.mHandler = mHandler;
 
 
-        DiskInterface disk = new PseudoCIFSDiskDriver(mHandler);
-        DiskDeviceContext context = null;
-        try {
-            context = (DiskDeviceContext) disk.createContext("theContext", new ConfigElement("",""));
-        } catch (DeviceContextException e) {
-            e.printStackTrace();
-        }
+        CifsOnlyXMLServerConfiguration smbConfig = new CifsOnlyXMLServerConfiguration();
 
 
-        ServerConfiguration config = new ServerConfiguration("HostageConfig");
-        CIFSConfigSection cifsConfig = new CIFSConfigSection(config);
         try {
         try {
-            cifsConfig.setHostAnnouncer(false);
-            cifsConfig.setNetBIOSSMB(true);
-            cifsConfig.setWin32NetBIOS(false);
-            cifsConfig.setAuthenticator(DefaultAuthenticator.class.getCanonicalName(), new ConfigElement("", ""), 0x10000000, true);
-            cifsConfig.setTcpipSMB(true);
-            cifsConfig.setNetBIOSDebug(true);
-            cifsConfig.setTcpipSMBPort(28582);
-            cifsConfig.setNameServerPort(28274);
-            cifsConfig.setDatagramPort(28275);
-            cifsConfig.setSessionPort(28276);
-            cifsConfig.setServerName("HAHAHA");
-            cifsConfig.setDomainName("Workgroup");
-
-            FilesystemsConfigSection filesystems = new FilesystemsConfigSection(config);
-            DiskSharedDevice dev = new DiskSharedDevice("VirtualDisk", disk, context);
-            filesystems.addShare(dev);
-
-            GlobalConfigSection global = new GlobalConfigSection(config);
-
-            CoreServerConfigSection core = new CoreServerConfigSection(config);
-            core.setThreadPool(2, 8);
-
-            DebugConfigSection debugConfigSection = new DebugConfigSection(config);
-            debugConfigSection.setDebug(ConsoleDebug.class.getCanonicalName(), new ConfigElement("append", ""));
-            
-            this.mSmbServer = new SMBServer(config);
+            smbConfig.loadConfiguration(new InputStreamReader(MainActivity.context.getResources().openRawResource(R.raw.jlan_config)));
+            CIFSConfigSection cifsConfig = (CIFSConfigSection) smbConfig.getConfigSection(CIFSConfigSection.SectionName);
+            cifsConfig.setBroadcastMask(getBroadcastAddress());
+
+            this.mSmbServer = new SMBServer(smbConfig);
             this.mSmbServer.addSessionListener(this);
             this.mSmbServer.addSessionListener(this);
             this.mSmbServer.addFileListener(this);
             this.mSmbServer.addFileListener(this);
-            this.mSmbServer.startServer();
 
 
-        } catch (InvalidConfigurationException e) {
-            e.printStackTrace();
+            this.mSmbServer.startServer();
         } catch (IOException e) {
         } catch (IOException e) {
             e.printStackTrace();
             e.printStackTrace();
+        } catch (InvalidConfigurationException e) {
+            e.printStackTrace();
         }
         }
-
     }
     }
 
 
     @Override
     @Override
@@ -139,4 +103,16 @@ public class CIFS implements Protocol, SessionListener, FileListener {
     public void fileOpened(SrvSession srvSession, NetworkFile networkFile) {
     public void fileOpened(SrvSession srvSession, NetworkFile networkFile) {
         System.out.println("---------------------- [CIFS] File closed!");
         System.out.println("---------------------- [CIFS] File closed!");
     }
     }
+
+    private String getBroadcastAddress() throws IOException {
+        WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
+        DhcpInfo dhcp = wifi.getDhcpInfo();
+        // handle null somehow
+
+        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
+        byte[] quads = new byte[4];
+        for (int k = 0; k < 4; k++)
+            quads[k] = (byte) (broadcast >> (k * 8));
+        return InetAddress.getByAddress(quads).toString().substring(1);
+    }
 }
 }

+ 1 - 10
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoCIFSDiskDriver.java

@@ -1,6 +1,5 @@
 package de.tudarmstadt.informatik.hostage.protocol.cifs;
 package de.tudarmstadt.informatik.hostage.protocol.cifs;
 
 
-import org.alfresco.config.ConfigElement;
 import org.alfresco.jlan.server.SrvSession;
 import org.alfresco.jlan.server.SrvSession;
 import org.alfresco.jlan.server.core.DeviceContext;
 import org.alfresco.jlan.server.core.DeviceContext;
 import org.alfresco.jlan.server.core.DeviceContextException;
 import org.alfresco.jlan.server.core.DeviceContextException;
@@ -10,20 +9,12 @@ import org.alfresco.jlan.server.filesys.FileOpenParams;
 import org.alfresco.jlan.server.filesys.NetworkFile;
 import org.alfresco.jlan.server.filesys.NetworkFile;
 import org.alfresco.jlan.server.filesys.SearchContext;
 import org.alfresco.jlan.server.filesys.SearchContext;
 import org.alfresco.jlan.server.filesys.TreeConnection;
 import org.alfresco.jlan.server.filesys.TreeConnection;
+import org.springframework.extensions.config.ConfigElement;
 
 
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.IOException;
 
 
-import de.tudarmstadt.informatik.hostage.Handler;
-
 public class PseudoCIFSDiskDriver implements DiskInterface {
 public class PseudoCIFSDiskDriver implements DiskInterface {
-
-    private final Handler mHandler;
-
-    public PseudoCIFSDiskDriver(Handler mHandler){
-        this.mHandler = mHandler;
-    }
-
     @Override
     @Override
     public void closeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
     public void closeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {