рдУрдкрди рд░рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ рдХреЛ рдареАрдХ рдХрд░реЗрдВ (рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ)

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рд╢рд╛рдпрдж, рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╣реИрдВрд╕реНрдЯреБрдирдиреЗрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЖрдИрд╕реАрдПрдордкреА рдкрд░ рд╕реБрд░рдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдкрд┐рдВрдЧреНрд╕ рдХреЗ рдКрдкрд░ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд░рд╛рдЙрдЯрд░ рдкрд░ рдУрдкрдирд░рдЯ рдХреЗ рддрд╣рдд рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрдХрдЯреНрдареЗ, рд╢реБрд░реВ рдХрд┐рдпрд╛ ... рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред рд▓рдХреНрд╖рдг рд╕рд░рд▓ рдереЗ - рдкреИрдХреЗрдЯ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдмрд╛рд╣рд░реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдм рдХреБрдЫ рд╣реЛрдо рд▓реИрди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╣реА рд╣рдВрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рд╢реНрди рдХреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдУрдкрдирд░ рдХреЗ рддрд╣рдд рдПрдХ рд╣рдВрд╕ рдкреИрдХреЗрдЬ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП - рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╡реЗрд▓реНрдбред



рдкрд╣рд▓рд╛ рдЪрд░рдг рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╣реИред рдореЗрд░реА рдорд╢реАрди рдкрд░ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреИрд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдЦреБрдж рдУрдкрдирд░рдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдФрд░ рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдЯ-рдЗрди рдЯреВрд▓рдЪрд┐рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдФрд░ рдпрд╣ рдорд╛рдирдХ рдУрдкрдирд░рдЯ рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреИрдХреЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╣реЕрдиреНрд╕реНрдЯрд╕реНрдЯрдирд▓ рд╕реНрд░реЛрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд╕рд╛рде рд╣реА рдкреИрдХреЗрдЬ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдореЗрдХрдлрд╛рдЗрд▓, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрдирд┐рдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ред рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдкрд┐рдЫрд▓реЗ рддреАрди рдХреЛ рдкреИрдЪ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдЕрдиреБрдХреВрд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдЙрд╕рдореЗрдВ рдбрд╛рд▓реЗрдВ рдФрд░ рдЙрди рдкрд░ рдкреИрдХреЗрдЬ / рдлреАрдб / рдкреИрдХреЗрдЬ рд╕реЗ рд▓рд┐рдВрдХ рдбрд╛рд▓реЗрдВред рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдореЗрдХрдлрд╝рд┐рд▓ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЙрдирдХреЗ src рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдПрдХрддреНрд░ рдХрд░реЗ, рдЬреЛ рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИред
рд╡рд╣реА рд╣реБрдЖ
 # рдХреЙрдкреАрд░рд╛рдЗрдЯ (C) 2006 OpenWrt.org
 #
 # рдпрд╣ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ, рдЬрд┐рд╕реЗ GNU рдЬрдирд░рд▓ рдкрдмреНрд▓рд┐рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ v2 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИред
 # рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ / LICENSEред
 #
 # $ Id: рдореЗрдХрдлрд╛рдЗрд▓ 6008 2007-01-06 18: 39: 10Z nbd $

 $ (TOPDIR) /rules.mk рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

 PKG_NAME: = hanstunnel
 PKG_VERSION: = 0.4.3
 PKG_RELEASE: = 1

 PKG_BUILD_DIR: = $ (BUDD_DIR) / $ (PKG_NAME) - $ (PKG_VERSION)

 $ (INCLUDE_DIR) /package.mk рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

 рдкреИрдХреЗрдЬ / рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
         рдЦрдВрдб: = рд╢реБрджреНрдз
         рд╢реНрд░реЗрдгреА: = рдиреЗрдЯрд╡рд░реНрдХ
         SUBMENU: = рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рд╕реБрд░рдВрдЧ
         DEPENDS: = + libstdcpp + kmod-tun
         TITLE: = ICMP рдкрд░ рд╣рдВрд╕ IP
         URL: = http: //code.gerade.org/hans/
 endef

 рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреИрдХреЗрдЬ / hanstunnel / рд╡рд┐рд╡рд░рдг
         рд╣рдВрд╕ ICMP рдЗрдХреЛ рдкреИрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ IPv4 рдХреЛ рдЯрдирд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ,
         рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкрд┐рдВрдЧ рдЯрдирд▓ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред  рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
         рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЦреЛрдЬреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд╣реБрдВрдЪ рд╣реИ
         рдлрд╝рд╛рдпрд░рд╡реЙрд▓, рд▓реЗрдХрд┐рди рдкрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред  endef
 endef

 рдирд┐рд░реНрдорд╛рдг / рддреИрдпрд╛рд░ рдХрд░рдирд╛
         рдЗрдХреЛ рдкреНрд░реАрдкреЗрдпрд░ рдкреНрд░реАрдкреЗрдпрд░
         mkdir -p $ (PKG_BUILD_DIR)
         cp -r ./src/* $ (PKG_BUILD_DIR) /
 endef

 рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрдорд╛рдг / рд╕рдВрдХрд▓рди 
         $ (MAKE) -C $ (PKG_BUILD_DIR) GCC = $ (TARGET_CC) GPP = $ (TARGET_CXX)
 endef 

 
 рдкреИрдХреЗрдЬ / рд╣реИрдВрдЧрд╕реНрдЯрдиреЗрд▓ / рд╕реНрдерд╛рдкрд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
         $ (INSTALL_DIR) $ (1) / usr / sbin
         $ (INSTALL_BIN) $ (PKG_BUILD_DIR) / рд╣рдиреНрд╕ $ (1) / usr / sbin /
         $ (INSTALL_DIR) $ (1) /etc/init.d
         $ (INSTALL_BIN) ./files/hans.init $ (1) /etc/init.d/hans
         $ (INSTALL_DIR) $ (1) / etc / config
         $ (INSTALL_CONF) ./files/hans.config $ (1) / рдЖрджрд┐ / рд╡рд┐рдиреНрдпрд╛рд╕ / рд╣рдВрд╕
 endef

 $ (eval $ (Call BuildPackage, hanstunnel))



рдмрд┐рд▓реНрдбрдлрд╛рдЗрд▓ рдХреЗ рд╕рд┐рд░ рдХреЛ рднреА рдереЛрдбрд╝рд╛ рджрд╛рдпрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛
рдореЗрдХрдлрд╛рдЗрд▓ рдЕрд╕реЗрдВрдмрд▓реА
 #LDFLAGS + = `рд╢ рдСрд╕реНрдлрд╝реНрд▓реИрдЧреНрд╕ ld $ (MODE)`
 CFLAGS + = -c -g -DLINUX -DHAVE_LINUX_IF_TUN_H
 TUN_DEV_FILE = src / tun_dev_linux.c
 # рдЬреАрд╕реАрд╕реА = рдЬреАрд╕реАрд╕реА
 # рдЬреАрдкреАрдкреА = рдЬреА ++

 .PHONY: рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛

 рд╕рднреА: рд╣рдВрд╕

 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛: build_dir

 build_dir:
	 mkdir -p рдмрд┐рд▓реНрдб

 tunemu.o: рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ / tunemu.o рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ

 рд╣рдВрд╕: рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг / tun.o build / sha1.o build / main.o build / client.o build / server.o build / dif.o build / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.o build / time.o build / tun_dev.o build / echo.o build / рдЕрдкрд╡рд╛рдж.o build / рдЙрдкрдпреЛрдЧрд┐рддрд╛.o
	 $ (GPP) -o hans build / tun.o build / sha1.o build / main.o build / client.o build / server.o build / dif.o build / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.o build / time.o build / tun_dev .o рдмрд┐рд▓реНрдб / рдЗрдХреЛред рдмрд┐рд▓реНрдб / рдЕрдкрд╡рд╛рджред рдирд┐рд░реНрдорд╛рдг / рдЙрдкрдпреЛрдЧрд┐рддрд╛.o $ (LDFLAGS)

 рдмрд┐рд▓реНрдб / рдпреВрдЯрд┐рд▓рд┐рдЯреА.рдУ: src / Utility.cpp src / рдЙрдкрдпреЛрдЧрд┐рддрд╛.h
	 $ (GPP) -c src / Utility.cpp -o $ @ -o $ @ $ (CFLAGS)

 рдмрд┐рд▓реНрдб / рдЕрдкрд╡рд╛рдж.рдУ: src / рдЕрдкрд╡рд╛рдж.CP src / рдЕрдкрд╡рд╛рдж.h
	 $ (GPP) -c src / рдЕрдкрд╡рд╛рдж.cpp -o $ @ $ (CFLAGS)

 build / echo.o: src / echo.cpp src / echo.h src / рдЕрдкрд╡рд╛рдж.h
	 $ (GPP) -c src / echo.cpp -o $ @ $ (CFLAGS)

 build / tun.o: src / tun.cpp src / tun.h src / рдЕрдкрд╡рд╛рдж.h src / рдЙрдкрдпреЛрдЧрд┐рддрд╛.h src / tun_dev.h
	 $ (GPP) -c src / tun.cpp -o $ @ $ (CFLAGS)

 рдирд┐рд░реНрдорд╛рдг / tun_dev.o:
	 $ (GCC) -c $ (TUN_DEV_FILE) -o build / tun_dev.o -o $ @ $ (CFLAGS)

 build / sha1.o: src / sha1.cpp src / sha1.h
	 $ (GPP) -c src / sha1.cpp -o $ @ $ (CFLAGS)

 build / main.o: src / main.cpp src / client.h src / server.h src / рдЕрдкрд╡рд╛рдж.h src / worker.h src / schem.h src / time.h src / echo.h src / tunред h src / tun_dev.h
	 $ (GPP) -c src / main.cpp -o $ @ $ (CFLAGS)

 build / client.o: src / client.cpp src / client.h src / server.h src / рдЕрдкрд╡рд╛рдж.h src / config.h src / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.h src / schem.h src / time.h src / echoред h src / tun.h src / tun_dev.h
	 $ (GPP) -c src / client.cpp-$ $ @ (CFLAGS)

 build / server.o: src / server.cpp src / server.h src / client.h src / рдЙрдкрдпреЛрдЧрд┐рддрд╛.h src / config.h src / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.h src / schem.h src / time.h src / echoред h src / tun.h src / tun_dev.h
	 $ (GPP) -c src / server.cpp -o $ @ $ (CFLAGS)

 рдмрд┐рд▓реНрдб / рдУрдЯрд░.рдУ.: src / schem.cpp src / schem.h src / sha1.h src / рдпреВрдЯрд┐рд▓рд┐рдЯреАред h
	 $ (GPP) -c src / schem.cpp -o $ @ $ (CFLAGS)

 рдмрд┐рд▓реНрдб / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.рдУ: src / worker.cpp src / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.h src / tun.h src / рдЕрдкрд╡рд╛рдж.h src / time.h src / echo.h src / tun_dev.h src / config
	 $ (GPP) -c src / worker.cpp-$ $ @ (CFLAGS)

 build / time.o: src / time.cpp src / time.h
	 $ (GPP) -c src / time.cpp -o $ @ $ (CFLAGS)

 рд╕рд╛рдл:
	 rm -f build / tun.o build / sha1.o build / main.o build / client.o build / server.o build / schem.o build / рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.o build / time.o build / tun_dev.o build / echo.o build / рдЕрдкрд╡рд╛рдж.o build / рдЙрдкрдпреЛрдЧрд┐рддрд╛.o build / tunemu.o рд╣рдВрд╕
	 rm -df рдмрд┐рд▓реНрдб

 build / tunemu.o: src / tunemu.h src / tunemu.c
	 $ (GCC) -c src / tunemu.c -o build / tunemu.o



рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░рдЦрд╛, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

 $ ls -R рдХрд╕реНрдЯрдо 
 рдХрд╕реНрдЯрдо:
 hanstunnel

 рд░рд┐рд╡рд╛рдЬ / рд╣реБрдирд╕реНрддреБрдирд▓рд╛рдЗрди:
 рдлрд╝рд╛рдЗрд▓реЗрдВ Makefile src

 рдХрд╕реНрдЯрдо / hanstunnel / рдлрд╝рд╛рдЗрд▓реЗрдВ:
 hans.config hans.init

 рдХрд╕реНрдЯрдо / рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ / src:
 рдореЗрдХрдлрд╛рдЗрд▓ рдУрд╕рдлреНрд▓реИрдЧреНрд╕ src

 рдХрд╕реНрдЯрдо / рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ / src / src:
 рдСрд░реНрдЯрд┐рдХ.рдЕрдк рдХреНрд▓рд╛рдЗрдВрдЯ.рдПрдЪ рдЗрдХреЛ.рдПрдЪ. рдореЗрди.рдХреИрдк .1. рд╢рд╛рдкред рд╕реАрд╕реАред рдЯрд╛рдЗрдоред рдЯрд╛рдк_рджреЗрд╡_рдЕрд░рд╡рд┐рди_рдореВред рдЯреБрди_рджреЗрд╡.рд╣ рддреБрди_рджреЗрд╡_рд╕реНрд╡рд░ .4 рдЯред рдЯ.рд╣ рд╡рд░реНрдХрд░ред рд╕реАрдкреА
 Ord.h config.h рдЕрдкрд╡рд╛рдж.рд╕реАрдкреАред рд╕рд░реНрд╡рд░ server.pp sha1.h time.h tun_dev_freebsd.c tun_dev_linux.c tunemu.c рдЙрдкрдпреЛрдЧрд┐рддрд╛.cpp рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.h
 client.cpp echo.cpp рдЕрдкрд╡рд╛рдж.h server.h sha1_license.txt tun.cpp tun_dev_generic.c tun_dev_openbsd.c tunemu.h рдЙрдкрдпреЛрдЧрд┐рддрд╛.h


рдЗрд╕рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдбрд░реЛ рдФрд░ рдЦреБрд╢реА рд╕реЗ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
 $ рдкреИрдХреЗрдЬ / рдлреАрдб / рдкреИрдХреЗрдЬ / рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ / рд╕рдВрдХрд▓рди -j5 рдмрдирд╛рддреЗ рд╣реИрдВ
  рдмрдирд╛рдирд╛ [рез] рдкреИрдХреЗрдЬ / рдлреАрдб / рдкреИрдХреЗрдЬ / рд╣реИрдВрдЧрд╕реНрдЯрдирд▓ / рд╕рдВрдХрд▓рди
  [2] -C рдкреИрдХреЗрдЬ / рдХрд░реНрдиреЗрд▓ / рд▓рд┐рдирдХреНрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ
  рдмрдирд╛рдирд╛ [реи] -рд╕реА рдкреИрдХреЗрдЬ / рд▓рд┐рдмрд╛рд╕ / рдЯреВрд▓рдЪреИрди рд╕рдВрдХрд▓рди
  [реи] -рд╕реА рдХрд╕реНрдЯрдо / рд╣реЕрдиреНрд╕реНрдЯреБрдирд▓рд╛рдЗрди рд╕рдВрдХрд▓рди рдХрд░реЗрдВ


рд╕рдм рдХреБрдЫ, рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рд╣реИ, рдпрд╣ рдмрд╛рдХреА рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИред

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЗрдзрд░ рдПрдХ рдЪреВрддрдбрд╝ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣реЛрдо рд▓реИрди рдореЗрдВ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд╕рд╛рде, рд╕реБрд░рдВрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╡рд╛рд▓ рдХреЗ рддреБрд░рдВрдд рдЪрд▓реА рдЧрдИред рдХреЗрд╡рд▓ рдореИрдВ рдкреНрд░рд╕рдиреНрди рдерд╛ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдУрдкрдирд░рдЯ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдореЛрдб рдореЗрдВ рд░рд╛рдЙрдЯрд░ рдкрд░ рд╣рдВрд╕ рдЪрд▓рд╛рдиреЗ рдкрд░ рднреА рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реБрдИред рдмрд╣реБрдд рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЖрдИрд╕реАрдПрдордкреА рдбрдВрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рд░рд╛рдЙрдЯрд░ рдФрд░ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ред рд╕рдорд╕реНрдпрд╛ ICMP рдЪреЗрдХрд╕рдо рдореЗрдВ рдереА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЦреБрд╢реА рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ред рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд▓реЗ рдЧрдпрд╛ рдФрд░ рдЦреБрдж echo.cpp рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдЧрдпрд╛, рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдХреБрдЫ рднреА рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рдирд╣реАрдВ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╖рдо рдкреИрдХреЗрдЯ рд▓рдВрдмрд╛рдИ рдФрд░ рдПрдордЖрдЗрдкреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд╣реИред RFC рдореЗрдВ рдЕрдЪреНрдЫреЗ рд▓реЛрдЧ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдпреЛрдЧ рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рдмрд╛рдЗрдЯреНрд╕, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреВрд╕рд░рд╛ 0 рд╣реИ, рдЬреЛ рдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдЯ рдореЗрдВ рд╡реГрджреНрдзрд┐ 256 рд╕реЗ рдЧреБрдгрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣рд╛рдБ icmpChecksum рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ рд╣реИ:

 uint16_t рдЗрдХреЛ :: icmpChecksum (рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рдбреЗрдЯрд╛, рдЗрдВрдЯ рд▓реЗрдВрде)
 {
     uint16_t * data16 = (uint16_t *) рдбреЗрдЯрд╛;
     uint32_t sum = 0;

     рдХреЗ рд▓рд┐рдП (рд░рд╛рд╢рд┐ = 0; рд▓рдВрдмрд╛рдИ> 1; рд▓рдВрдмрд╛рдИ - = 2)
         sum + = * data16 ++;


     рдЕрдЧрд░ (рд▓рдВрдмрд╛рдИ == 1)
     {
         рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдкреВрдВрдЫ [2] = {* (рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ *) рдбреЗрдЯрд╛ 16, 0};
         рдпреЛрдЧ + = * (uint16_t *) рдкреВрдВрдЫ;
     }
     рдЬрдмрдХрд┐ (рд░рд╛рд╢рд┐ >> 16)
         sum = (sum >> 16) + (sum & 0xffff);

     рд╡рд╛рдкрд╕реА ~ рд░рд╛рд╢рд┐;
 }


рдЙрд╕рдХреЗ рд╕рд╛рде, рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрдЦрдж рдЕрдВрддред

UPD : jcmvbkbc рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкреВрдВрдЫ

Source: https://habr.com/ru/post/In211284/


All Articles