package de.tudarmstadt.informatik.hostage.protocol; import android.content.Context; import android.net.DhcpInfo; import android.net.wifi.WifiManager; import org.alfresco.jlan.app.CifsOnlyXMLServerConfiguration; import org.alfresco.jlan.netbios.server.AddNameListener; import org.alfresco.jlan.netbios.server.NetBIOSNameEvent; import org.alfresco.jlan.netbios.server.NetBIOSNameServer; import org.alfresco.jlan.server.SessionListener; import org.alfresco.jlan.server.SrvSession; import org.alfresco.jlan.server.config.InvalidConfigurationException; 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.smb.server.CIFSConfigSection; import org.alfresco.jlan.smb.server.SMBServer; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.util.List; 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; public class CIFS implements Protocol, SessionListener, FileListener{ private Listener mHandler; private SMBServer mSmbServer; private NetBIOSNameServer mNbNameServer; public void initialize(Listener mHandler) { this.mHandler = mHandler; CifsOnlyXMLServerConfiguration smbConfig = new CifsOnlyXMLServerConfiguration(); try { smbConfig.loadConfiguration(new InputStreamReader(MainActivity.context.getResources().openRawResource(R.raw.jlan_config))); CIFSConfigSection cifsConfig = (CIFSConfigSection) smbConfig.getConfigSection(CIFSConfigSection.SectionName); cifsConfig.setBroadcastMask(getBroadcastAddress()); cifsConfig.setSessionPort(28276); cifsConfig.setTcpipSMBPort(28582); cifsConfig.setDatagramPort(28274); cifsConfig.setHostAnnouncerPort(28275); cifsConfig.setNetBIOSSMB(true); cifsConfig.setDisableNIOCode(true); this.mSmbServer = new SMBServer(smbConfig); this.mNbNameServer = new NetBIOSNameServer(smbConfig); this.mSmbServer.addSessionListener(this); this.mSmbServer.addFileListener(this); this.mNbNameServer.startServer(); this.mSmbServer.startServer(); } catch (IOException e) { e.printStackTrace(); } catch (InvalidConfigurationException e) { e.printStackTrace(); } } @Override public int getPort() { return 1025; } @Override public boolean isClosed() { return false; } @Override public boolean isSecure() { return false; } @Override public List processMessage(Packet message) { return null; } @Override public TALK_FIRST whoTalksFirst() { return null; } public String toString(){ return "CIFS"; } @Override public void sessionClosed(SrvSession srvSession) { System.out.println("---------------------- [CIFS] Session closed!"); } @Override public void sessionCreated(SrvSession srvSession) { System.out.println("---------------------- [CIFS] Session created!"); } @Override public void sessionLoggedOn(SrvSession srvSession) { System.out.println("---------------------- [CIFS] Session LoggedOn!"); } @Override public void fileClosed(SrvSession srvSession, NetworkFile networkFile) { System.out.println("---------------------- [CIFS] File closed!"); } @Override public void fileOpened(SrvSession srvSession, NetworkFile networkFile) { 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); } }