Browse Source

fixed race condition in smb protocol impl

Fabio Arnold 9 years ago
parent
commit
bfc33ef3f4

+ 7 - 0
src/de/tudarmstadt/informatik/hostage/net/MyDatagramSocketFactory.java

@@ -22,6 +22,7 @@ public class MyDatagramSocketFactory {
 			try {
 				DatagramSocketImpl impl = getImpl(socket);
 				injectFD(fd, impl);
+				setBound(socket);
 			} catch (NoSuchFieldException e) {
 			} catch (IllegalAccessException e) {
 			} catch (IllegalArgumentException e) {
@@ -44,4 +45,10 @@ public class MyDatagramSocketFactory {
 		fdField.set(impl, fd);
 	}
 
+	private void setBound(DatagramSocket socket) throws NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
+		Field boundField = socket.getClass().getDeclaredField("isBound");
+		boundField.setAccessible(true);
+		boundField.set(socket, true);
+	}
+
 }

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/persistence/HostageDBOpenHelper.java

@@ -193,8 +193,8 @@ public class HostageDBOpenHelper extends SQLiteOpenHelper {
 		attackValues.put(AttackEntry.COLUMN_NAME_LOCAL_PORT, record.getLocalPort());
 		attackValues.put(AttackEntry.COLUMN_NAME_REMOTE_IP, record.getRemoteIP()); // Log Remote IP
 		attackValues.put(AttackEntry.COLUMN_NAME_REMOTE_PORT, record.getRemotePort()); // Log Remote Port
-		attackValues.put(AttackEntry.COLUMN_NAME_BSSID, record.getBssid());
 		attackValues.put(AttackEntry.COLUMN_NAME_INTERNAL_ATTACK, record.getWasInternalAttack());
+		attackValues.put(AttackEntry.COLUMN_NAME_BSSID, record.getBssid());
 		
 
 		// Inserting Rows

+ 11 - 5
src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NBSS.java

@@ -26,17 +26,23 @@ public class NBSS extends Thread {
 	private Reader reader;
 	private Writer writer;
 	private SMB smb;
-	
+
+	public NBSS() {
+		nbssPort = 139;
+		MyServerSocketFactory factory = new MyServerSocketFactory();
+		try {
+			nbssServer = factory.createServerSocket(nbssPort);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
 	@Override
 	public void run() {
 		try {
-			nbssPort = 139;
-            MyServerSocketFactory factory = new MyServerSocketFactory();
-            nbssServer = factory.createServerSocket(nbssPort);
 			nbssSocket = nbssServer.accept();
 			smb = new SMB();
 			talkToClient(nbssSocket.getInputStream(), nbssSocket.getOutputStream());
-			
 		} catch (IOException e) {
 			e.printStackTrace();
 		}

+ 15 - 5
src/de/tudarmstadt/informatik/hostage/protocol/smbutils/NMB.java

@@ -211,19 +211,29 @@ public class NMB extends Thread {
 	public void run() {
 		NBSS nbss = new NBSS();
 		nbss.start();
+
+		/*
+		// XXX: workaround for race condition TODO: FIX FIX FIX
+		try {
+			Thread.sleep(1000);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		*/
+
 		try {
 /*
 			nbnsSocket = new DatagramSocket(nbnsPort);
 			nbdsSocket = new DatagramSocket(nbdsPort);
 */
-            MyDatagramSocketFactory factory = new MyDatagramSocketFactory();
-            nbnsSocket = factory.createDatagramSocket(nbnsPort);
-            nbdsSocket = factory.createDatagramSocket(nbdsPort);
+			MyDatagramSocketFactory factory = new MyDatagramSocketFactory();
+			nbnsSocket = factory.createDatagramSocket(nbnsPort);
+			nbdsSocket = factory.createDatagramSocket(nbdsPort);
 		} catch (SocketException e) {
 			e.printStackTrace();
 		} catch (IOException e) {
-            e.printStackTrace();
-        }
+			e.printStackTrace();
+		}
 
         registrate();
 		announceHost();