packages feed

moesocks 0.1.0.16 → 0.1.0.17

raw patch · 12 files changed

+65/−52 lines, 12 files

Files

CHANGELOG.md view
@@ -1,6 +1,9 @@-0.1.0.16+0.1.0.17 --------+* Add `--no-socks5` flag to switch off the socks5 service on local +0.1.0.16+-------- * Add compatibility with shadowsocks for UDP port forwarding  0.1.0.15
README.md view
@@ -21,9 +21,9 @@ Not working ----------- * Remote is flaky -* Socks4 / Socks4a-* UDP over Socks5-* Four times slower then original Python's implementation+* UDP over Socks5 is not implemented+* 2.5 times slower then the original Python implementation (measured at 17.6M/s+    vs 43.6M/s on an Intel P8800, using the AES-256-CFB encryption)  Planning features ------------------@@ -34,7 +34,7 @@  There's a bug that prevents remote from working correctly. -You should use the python implementation of [shadowsocks] on the remote+You should use the original Python implementation of [shadowsocks] on the remote server.  There is an earlier implementation of [shadowsocks in Haskell] by rnons that
moesocks.cabal view
@@ -1,6 +1,6 @@ name:               moesocks category:           Network-version:            0.1.0.16+version:            0.1.0.17 license:            Apache-2.0 synopsis:           A functional firewall killer description:        A socks5 proxy using the client / server architecture.
src/Network/MoeSocks/App.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ExistentialQuantification #-}  module Network.MoeSocks.App where @@ -335,7 +334,16 @@          _forward_TCP_Apps         _forward_UDP_Apps-        _socks5App+        if (_options ^. disableSocks5) +          then +            if (_options ^. forwardTCP & isn't _Empty)+                    || (_options ^. forwardUDP & isn't _Empty)+              then +                forever - sleep 1000+              else+                pute "Nothing to run!"+                +          else _socks5App        debugRun :: IO ()       debugRun = do
src/Network/MoeSocks/Common.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ExistentialQuantification #-}  module Network.MoeSocks.Common where 
src/Network/MoeSocks/Config.hs view
@@ -16,7 +16,7 @@   , _password = "moesocks"   , _method = _DefaultMethod   , _timeout = 300-  , _tcpBufferSizeInPacket = 128+  , _tcpBufferSizeInPacket = 256   , _throttle = False   , _throttleSpeed = 8000 -- in Kilobytes   }@@ -30,4 +30,5 @@   , _verbosity = DEBUG   , _forwardTCP = []   , _forwardUDP = []+  , _disableSocks5 = False   } 
src/Network/MoeSocks/Constant.hs view
@@ -24,3 +24,4 @@  _ReceiveLength :: Int _ReceiveLength = 4096+
src/Network/MoeSocks/Helper.hs view
@@ -1,7 +1,5 @@-{-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE CPP #-}-{-# LANGUAGE RecursiveDo #-}+{-# LANGUAGE LambdaCase #-}  module Network.MoeSocks.Helper where @@ -176,6 +174,11 @@ connectTunnel :: (Maybe String, IO ()) -> (Maybe String, IO ()) -> IO () connectTunnel = waitBothDebug +{-connectTunnel :: (Maybe String, IO ()) -> (Maybe String, IO ()) -> IO ()-}+{-connectTunnel x y = -}+  {-withAsync (logWaitIO x) - const - do-}+    {-logWaitIO y-}+ connectMarket :: (Maybe String, IO ()) -> (Maybe String, IO ()) -> IO () connectMarket = waitBothDebug @@ -273,8 +276,7 @@       {-puts - "rawBytes: " <> show _rawBytes-}       _bytes <- _decrypt _rawBytes -      let r =  _parser - _partial <> _bytes-      case r of+      case _parser - _partial <> _bytes of         Done i _r -> pure (i, _r)         Fail _ _ msg -> throwIO - ParseException -                     "Failed to parse " <> _id <> ": " <> msg@@ -284,8 +286,7 @@  timeoutFor :: String -> Timeout -> IO a -> IO a timeoutFor aID aTimeout aIO = do-  _r <- timeout aTimeout aIO-  case _r of+  timeout aTimeout aIO >>= \case     Nothing -> throw - TimeoutException aID     Just _r -> pure _r @@ -367,8 +368,7 @@                     <> " miliseconds."             threadDelay - floor - _sleepTime -        _r <- atomically - readTBQueue aTBQueue -        case _r of+        (atomically - readTBQueue aTBQueue) >>= \case            Nothing -> () <$ _shutdown           Just _data -> do                           timeoutFor aID aTimeout - sendAll aSocket _data@@ -390,3 +390,4 @@  tryIO :: String -> IO a -> IO (Either IOException a) tryIO _ = try -- . logException aID+  
src/Network/MoeSocks/Options.hs view
@@ -30,6 +30,14 @@         | otherwise = DebugMode   in +  let _disableSocks5 :: O.Parser Bool+      _disableSocks5 = switch -+                      long "disable-socks5"+                  <>  help ("Do not start a socks5 server on local. It can be "+                          <> "useful to run moesocks only as a secure tunnel")+                  +  in+                                let _config = ( strOption -                       short 'c'@@ -40,8 +48,8 @@                     in -  let __verbosity :: O.Parser Priority -      __verbosity = flag INFO DEBUG -+  let _verbosity :: O.Parser Priority +      _verbosity = flag INFO DEBUG -                           short 'v'                       <>  long "verbose"                       <>  help "Turn on logging"@@ -115,9 +123,10 @@   MoeOptions                <$> fmap parseMode _mode                <*> fmap (view packed) _config-              <*> __verbosity+              <*> _verbosity               <*> fmap parseForwarding _forwardTCP               <*> fmap parseForwarding _forwardUDP+              <*> _disableSocks5  opts :: ParserInfo MoeOptions opts = info (helper <*> optionParser) - 
src/Network/MoeSocks/TCP.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ExistentialQuantification #-}  module Network.MoeSocks.TCP where @@ -16,9 +15,7 @@ import Network.MoeSocks.Type import Network.Socket hiding (send, recv, recvFrom, sendTo) import Prelude hiding ((-), take)-import qualified Data.List as L - local_Socks5_RequestHandler :: MoeConfig -> ByteString -> (Socket, SockAddr)                                                                      -> IO () local_Socks5_RequestHandler aConfig _ (aSocket,_) = do@@ -65,7 +62,7 @@       _initSocket =            getSocket (_c ^. remote) (_c ^. remotePort) Stream  -  puts - "L : " <> show _clientRequest+  puts - "L: " <> show _clientRequest      logSA "L remote socket" _initSocket -      \(_remoteSocket, _remoteAddress) -> do@@ -80,15 +77,9 @@       send_ aSocket - builder_To_ByteString _connectionReplyBuilder      -    let _msg = -                concat - L.intersperse " -> " -                [ -                  show _localPeerAddr-                , showRequest _clientRequest-                ]+    let _msg = show _localPeerAddr <> " -> " <> showRequest _clientRequest     -    _log - "L " -- <> showConnectionType (_clientRequest ^. connectionType)-                <> ": " <> _msg+    _log - "L T: " <> _msg      let handleLocal __remoteSocket = do           (_encrypt, _decrypt) <- getCipher@@ -193,15 +184,9 @@     _remotePeerAddr <- getPeerName aSocket     _targetPeerAddr <- getPeerName _targetSocket -    let _msg = -                concat - L.intersperse " -> " - -                [ -                  show _remotePeerAddr-                , showRequest _clientRequest-                ]+    let _msg = show _remotePeerAddr <> " -> " <> showRequest _clientRequest -    _log - "R " -- <> showConnectionType (_clientRequest ^. connectionType)-                  <> ": " <> _msg+    _log - "R T: " <> _msg      let          handleTarget __leftOverBytes __targetSocket = do
src/Network/MoeSocks/Type.hs view
@@ -90,6 +90,7 @@   , _verbosity :: Priority   , _forwardTCP :: [Forward]   , _forwardUDP :: [Forward]+  , _disableSocks5 :: Bool   }   deriving (Show, Eq) 
src/Network/MoeSocks/UDP.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ExistentialQuantification #-}  module Network.MoeSocks.UDP where @@ -45,7 +44,7 @@                             forwardRemoteHost)                           (aForwarding ^. forwardRemotePort)   -  puts - "L UDP: " <> show _clientRequest+  {-puts - "L UDP: " <> show _clientRequest-}    _sa <- getSocket (_c ^. remote) (_c ^. remotePort) Datagram @@ -59,15 +58,18 @@        {-let (_encrypt, _decrypt) = (pure, pure)-} -      let _msg = buildShadowSocksRequest _clientRequest aMessage+      let _bytes = buildShadowSocksRequest _clientRequest aMessage -      puts - "L UDP: " <> show _msg+      {-puts - "L UDP: " <> show _bytes-}++      let _msg = show aSockAddr <> " -> " <> showRequest _clientRequest+      _log - "L U: " <> _msg       -      send_ _remoteSocket =<< _encrypt _msg+      send_ _remoteSocket =<< _encrypt _bytes        (_r, _) <- recv_ _remoteSocket >>= _decrypt >>= parseShadowSocksRequest -      puts - "L UDP <--: " <> show _r+      {-puts - "L UDP <--: " <> show _r-}       when (_r & isn't _Empty) - do         sendAllTo aSocket _r aSockAddr @@ -86,13 +88,16 @@    (_decryptedMessage, _clientRequest) <- parseShadowSocksRequest _msg   -  puts - "R UDP: " <> show _clientRequest-  puts - "R UDP: " <> show _decryptedMessage+  {-puts - "R UDP: " <> show _clientRequest-}+  {-puts - "R UDP: " <> show _decryptedMessage-}      logSA "R UDP -->:" (initTarget _clientRequest) - \_r -> do     let (_clientSocket, _clientAddr) = _r -    puts - "R UDP clientSocket: " <> show _r+    {-puts - "R UDP clientSocket: " <> show _r-}+    +    let _msg = show aSockAddr <> " -> " <> showRequest _clientRequest+    _log - "R U: " <> _msg      connect _clientSocket _clientAddr     @@ -100,7 +105,7 @@      _r <- buildShadowSocksRequest _clientRequest <$> recv_ _clientSocket -    puts - "R UDP <--: " <> show _r+    {-puts - "R UDP <--: " <> show _r-}      when (_r & isn't _Empty) - do       _encryptedMessage <- _encrypt _r