moesocks 1.0.0.1 → 1.0.0.10
raw patch · 11 files changed
+112/−43 lines, 11 files
Files
- CHANGELOG.md +8/−0
- README.md +2/−1
- moesocks.cabal +1/−1
- src/Network/MoeSocks/Bootstrap.hs +21/−16
- src/Network/MoeSocks/Default.hs +54/−2
- src/Network/MoeSocks/Helper.hs +1/−1
- src/Network/MoeSocks/Options.hs +18/−17
- src/Network/MoeSocks/Runtime.hs +4/−1
- src/Network/MoeSocks/Type/Bootstrap/Config.hs +1/−0
- src/Network/MoeSocks/Type/Bootstrap/Option.hs +2/−3
- src/Network/MoeSocks/Type/Runtime.hs +0/−1
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 }