|
@@ -4,12 +4,14 @@ import java.io.FileDescriptor;
|
|
|
import java.io.IOException;
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.net.InetAddress;
|
|
|
+import java.net.InetSocketAddress;
|
|
|
import java.net.ServerSocket;
|
|
|
import java.net.SocketImpl;
|
|
|
|
|
|
import javax.net.ServerSocketFactory;
|
|
|
|
|
|
import de.tudarmstadt.informatik.hostage.system.PrivilegedPort;
|
|
|
+import de.tudarmstadt.informatik.hostage.ui.MainActivity;
|
|
|
|
|
|
/**
|
|
|
* Server Socket Factory using the porthack.
|
|
@@ -23,18 +25,26 @@ public class MyServerSocketFactory extends ServerSocketFactory {
|
|
|
*/
|
|
|
@Override
|
|
|
public ServerSocket createServerSocket(int port) throws IOException {
|
|
|
- FileDescriptor fd = new PrivilegedPort(port).bindAndGetFD();
|
|
|
- ServerSocket socket = new ServerSocket();
|
|
|
-
|
|
|
- try {
|
|
|
- SocketImpl impl = getImpl(socket);
|
|
|
- injectFD(fd, impl);
|
|
|
- injectImpl(impl, socket);
|
|
|
- setBound(socket);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ ServerSocket socket = null;
|
|
|
+ if(port > 1023){
|
|
|
+ socket = new ServerSocket();
|
|
|
+ // Set SO_REUSEADDRESS before port is bound
|
|
|
+ socket.setReuseAddress(true);
|
|
|
+ socket.bind(new InetSocketAddress(port));
|
|
|
+ } else if(MainActivity.porthackInstalled){
|
|
|
+ FileDescriptor fd = new PrivilegedPort(port).bindAndGetFD();
|
|
|
+ socket = new ServerSocket();
|
|
|
+
|
|
|
+ try {
|
|
|
+ SocketImpl impl = getImpl(socket);
|
|
|
+ injectFD(fd, impl);
|
|
|
+ injectImpl(impl, socket);
|
|
|
+ setBound(socket);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return socket;
|
|
|
}
|
|
|
|