packages feed

moesocks 1.0.0.1 → 1.0.0.10

raw patch · 11 files changed

+112/−43 lines, 11 files

Files

CHANGELOG.md view
@@ -1,3 +1,11 @@+1.0.0.10+--------+* Add `forbidden_IPs` field in `config.json`+* Use +  [Reserved IP addresses](https://en.wikipedia.org/wiki/Reserved_IP_addresses)+  as the default value for `forbidden_IPs`+* Add `show-default-config` to options+ 1.0.0.1 ------- * Default to no buffer, rely on buffer in the kernel. Add force Explicit
README.md view
@@ -110,10 +110,11 @@  ## Force ECN -On Linux 3.7+ (as root)+On Linux 2.4.20+ (as root)      echo 1 > /proc/sys/net/ipv4/tcp_ecn +ECN is recommended on both `local` and `remote`.  Credits =======
moesocks.cabal view
@@ -1,6 +1,6 @@ name:               moesocks category:           Network-version:            1.0.0.1+version:            1.0.0.10 license:            Apache-2.0 synopsis:           A functional firewall killer description:        A SOCKS5 proxy using the client / server architecture.
src/Network/MoeSocks/Bootstrap.hs view
@@ -23,12 +23,24 @@ import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Network.MoeSocks.Type.Bootstrap.Option as O ++asList :: ([(Text, Value)] -> [(Text, Value)]) -> Value -> Value+asList f = over _Object - H.fromList . f . H.toList++toReadableConfig :: Value -> Value+toReadableConfig = asList - each . _1 %~ T.tail++showConfig :: C.Config -> Text+showConfig =  review _JSON+              . toReadableConfig+              . review _JSON+ withGateOptions :: O.Options -> IO a -> IO () withGateOptions someOptions aIO = do+  let _br = putStrLn ""+   if someOptions ^. O.listMethods     then do-      let _br = putStrLn ""-       _br       putStrLn "Recommended:"       itraverse_ (\k _ -> putStrLn - "\t\t" <> k ^. _Text) - safeMethods@@ -37,8 +49,12 @@       putStrLn "Supported:"       itraverse_ (\k _ -> putStrLn - "\t\t" <> k ^. _Text) - unsafeMethods -    else-      () <$ aIO+    else +      if someOptions ^. O.showDefaultConfig+        then+          putStrLn - showConfig defaultConfig ^. _Text+        else+          () <$ aIO  loadConfig :: O.Options -> ExceptT String IO C.Config loadConfig someOptions = do@@ -51,9 +67,6 @@    let -      asList :: ([(Text, Value)] -> [(Text, Value)]) -> Value -> Value-      asList f = over _Object - H.fromList . f . H.toList-       fixConfig:: Text -> Text       fixConfig x =         let _remoteHost = "remoteHost"@@ -84,14 +97,6 @@                                                 . fixConfig                                                 ) -      toReadableConfig :: Value -> Value-      toReadableConfig = asList - each . _1 %~ T.tail--      showConfig :: C.Config -> Text-      showConfig =  review _JSON-                    . toReadableConfig-                    . review _JSON-       filterEssentialConfig :: Value -> Value       filterEssentialConfig = over _Object - \_obj ->                                 foldl (flip H.delete) _obj -@@ -111,7 +116,7 @@        optionalConfig = filterEssentialConfig - toJSON defaultConfig -      _maybeConfig = -- trace ("JSON: " <> show _v)+      _maybeConfig =  -- trace' "JSON: "                       _v                       >>= decode                           . encode
src/Network/MoeSocks/Default.hs view
@@ -3,9 +3,14 @@ module Network.MoeSocks.Default where  import Control.Lens+import Control.Monad.Writer+import Data.IP+import Data.Text (Text)+import Data.Text.Lens import Network.MoeSocks.Encrypt (constCipherBox) import Network.MoeSocks.Type import System.Log.Logger+import qualified Data.Text as T import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Network.MoeSocks.Type.Bootstrap.Option as O @@ -25,9 +30,47 @@   , C._obfuscationFlushBound = 4096   , C._fastOpen = False   , C._socketOption_TCP_NOTSENT_LOWAT = True+  , C._forbidden_IPs = _reserved_IP_Addresses   } +  where+    _reserved_IP_Addresses :: [Text]+    _reserved_IP_Addresses = execWriter $ do+      let ip = tell . pure +      -- https://en.wikipedia.org/wiki/Reserved_IP_addresses+      ip "0.0.0.0/8"+      ip "10.0.0.0/8"+      ip "100.64.0.0/10"+      ip "127.0.0.0/8"+      ip "169.254.0.0/16"+      ip "172.16.0.0/12"+      ip "192.0.0.0/24"+      ip "192.0.2.0/24"+      ip "192.88.99.0/24"+      ip "192.168.0.0/16"+      ip "198.18.0.0/15"+      ip "198.51.100.0/24"+      ip "203.0.113.0/24"+      ip "224.0.0.0/4"+      ip "240.0.0.0/4"+      ip "255.255.255.255/32"++      ip "::/128"+      ip "::1/128"+      ip "::ffff:0:0/96"+      ip "100::/64"+      ip "64:ff9b::/96"+      ip "2001::/32"+      ip "2001:10::/28"+      ip "2001:20::/28"+      ip "2001:db8::/32"+      ip "2002::/16"+      ip "fc00::/7"+      ip "fe80::/10"+      ip "ff00::/8"++ defaultOptions :: O.Options defaultOptions = O.Options   {@@ -38,11 +81,19 @@   , O._forward_UDPs = []   , O._disable_SOCKS5 = False   , O._obfuscation = False-  , O._forbidden_IPs = ["127.0.0.1", "0.0.0.0", "::1"]   , O._listMethods = False+  , O._showDefaultConfig = False   , O._params = []   }  +parseForbidden_IPs :: [Text] -> [IPRange]+parseForbidden_IPs =+                    toListOf $ each+                              . to T.strip+                              . _Text+                              . _Show+                     + defaultEnv :: Env defaultEnv =   let _c = defaultConfig@@ -58,7 +109,8 @@     , _fastOpen                       = _c ^. C.fastOpen     , _socketOption_TCP_NOTSENT_LOWAT = _c ^. C.socketOption_TCP_NOTSENT_LOWAT     , _obfuscation                    = _o ^. O.obfuscation-    , _forbidden_IPs                  = _o ^. O.forbidden_IPs+    , _forbidden_IPs                  = _c ^. C.forbidden_IPs +                                            & parseForbidden_IPs     {-, _config = defaultConfig-}     , _cipherBox = let (a,b,c,d) = constCipherBox in CipherBox a b c d   }
src/Network/MoeSocks/Helper.hs view
@@ -460,7 +460,7 @@ toHaskellNamingConvention x =    let xs = x & T.split (`elem` ['_', '-'])   in-  if xs & anyOf each (T.all isUpper)+  if xs & anyOf each (T.all isUpper . T.dropWhile (== 's') . T.reverse)     then x     else xs             & over (_tail . traversed) T.toTitle
src/Network/MoeSocks/Options.hs view
@@ -4,7 +4,6 @@  import Control.Lens import Data.Aeson-import Data.IP import Data.Maybe import Data.Text (Text) import Data.Text.Lens@@ -12,11 +11,11 @@ import Network.MoeSocks.Helper import Network.MoeSocks.Type.Bootstrap.Option import Network.MoeSocks.Type.Common-import qualified Network.MoeSocks.Type.Bootstrap.Config as C import Options.Applicative hiding (Parser) import Prelude hiding ((-), takeWhile) import System.Log.Logger import qualified Data.Text as T+import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Options.Applicative as O import Data.Attoparsec.Text (Parser, takeWhile, char, decimal, skipSpace,                               parseOnly, many', choice)@@ -30,6 +29,14 @@ textParam :: O.Mod O.OptionFields String -> O.Parser (Maybe Value) textParam = optional . fmap toJSON . textOption +commaSeperatedArrayParam :: O.Mod O.OptionFields String +                          -> O.Parser (Maybe Value)+commaSeperatedArrayParam = +  optional . fmap toJSON . fmap (filter (isn't _Empty)+                                    . map T.strip +                                    . T.splitOn ",") +                          . textOption+ intParam :: O.Mod O.OptionFields Int -> O.Parser (Maybe Value) intParam = optional . fmap toJSON . option auto @@ -69,6 +76,11 @@                       long "list-methods"                   <>  help "Show supported encryption methods" +      _showDefaultConfig :: O.Parser Bool+      _showDefaultConfig = switch -+                      long "show-default-config"+                  <>  help "Show default json configuration"+             _tcpBufferSize = intParam -                               long "tcp-buffer-size"                           <>  metavar "SIZE"@@ -209,28 +221,16 @@           & parseOnly forwardListParser           & toListOf (traverse . traverse) -      _forbidden_IPs :: O.Parser (Maybe Text)-      _forbidden_IPs = optional - textOption -+      _forbidden_IPs = commaSeperatedArrayParam -                           long "forbidden-ip"                       <>  metavar "IPLIST"-                      <>  defaultHelp (defaultOptions ^. forbidden_IPs-                                        & map show-                                        & map (review _Text)+                      <>  defaultHelp (defaultConfig ^. C.forbidden_IPs                                         & T.intercalate ", ")                                 (""                                 <> "comma seperated IP list forbidden to "                                 <> "connect"                                 ) -      parseForbidden_IP :: Maybe Text -> [IPRange]-      parseForbidden_IP = maybe (defaultOptions ^. forbidden_IPs) --                                (toListOf - each-                                          . to T.strip-                                          . _Text-                                          . _Show-                                ) . T.splitOn ","--       tag :: a -> O.Parser (Maybe b) -> O.Parser (Maybe (a, b))       tag x = fmap . fmap - ((,) x) @@ -246,6 +246,7 @@         , tag "_timeout"        _timeout         , tag "_tcpBufferSize"  _tcpBufferSize         , tag "_fastOpen"       _fastOpen+        , tag "_forbidden_IPs"  _forbidden_IPs         ]         & sequenceA         & fmap catMaybes@@ -261,8 +262,8 @@               <*> fmap parseForwarding _forwardUDP               <*> _disable_SOCKS5               <*> _obfuscation-              <*> fmap parseForbidden_IP _forbidden_IPs               <*> _listMethods+              <*> _showDefaultConfig               <*> _params  opts :: ParserInfo Options
src/Network/MoeSocks/Runtime.hs view
@@ -126,7 +126,10 @@         & fastOpen                       .~ _c ^. C.fastOpen         & socketOption_TCP_NOTSENT_LOWAT .~ _s         & obfuscation                    .~ _o ^. O.obfuscation-        & forbidden_IPs                  .~ _o ^. O.forbidden_IPs+        & forbidden_IPs                  .~ (_c ^. C.forbidden_IPs+                                                & parseForbidden_IPs)+                                            +                                              let _jobs = loadJobs _c _o & filterJobs (_o ^. O.runningMode) 
src/Network/MoeSocks/Type/Bootstrap/Config.hs view
@@ -23,6 +23,7 @@   , _obfuscationFlushBound :: Int -- should be greater then MTU   , _fastOpen :: Bool   , _socketOption_TCP_NOTSENT_LOWAT :: Bool+  , _forbidden_IPs :: [Text]   }   deriving (Show, Eq, Generic) 
src/Network/MoeSocks/Type/Bootstrap/Option.hs view
@@ -6,9 +6,8 @@ import Control.Lens import Data.Aeson import Data.Text (Text)-import Data.IP-import System.Log.Logger import Network.MoeSocks.Type.Common+import System.Log.Logger  data RunningMode = RemoteMode | LocalMode | DebugMode       deriving (Show, Eq)@@ -22,8 +21,8 @@   , _forward_UDPs :: [Forward]   , _disable_SOCKS5 :: Bool   , _obfuscation :: Bool-  , _forbidden_IPs :: [IPRange]   , _listMethods :: Bool+  , _showDefaultConfig :: Bool   , _params :: [(Text, Value)]   }   deriving (Show, Eq)
src/Network/MoeSocks/Type/Runtime.hs view
@@ -131,7 +131,6 @@   , _socketOption_TCP_NOTSENT_LOWAT :: Bool   , _obfuscation :: Bool   , _forbidden_IPs :: [IPRange]-   , _cipherBox :: CipherBox   }