рд░реЗ: рд╕рд░реНрд╡рд░ рд╕реЗ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рдлреЗрдж рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ, рдЬреЛ рдПрдирдПрдЯреА рдХреЗ рдкреАрдЫреЗ рд╣реИ

рд╢реБрдн рджрд┐рди, рд╣реЗрдмреНрд░ред

рдХреНрдпреВрдП рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрдж рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╢реНрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рдереЛрдбрд╝реА рдкреГрд╖реНрдарднреВрдорд┐ред
рдПрдХ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдПрдХ рд╡рд┐рдЬрд┐рдЯрд┐рдВрдЧ рдПрдбрдорд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рдиреМрдХрд░реА рдорд┐рд▓реАред рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЪрд▓реЛ рдЗрд╕реЗ рдЧреЗрдЯрд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ), рдЬрд┐рд╕ рдкреБрд▓ рдиреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рд╡реНрд╣рд╛рдЗрдЯ рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рдПрдХ рдПрдбреАрдПрд╕рдПрд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдЪреВрдВрдХрд┐ рдореИрдВ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрди рдЫреЛрдЯреА-рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрд▓реНрдж рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдарди рдХреЗ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рджреВрд░рд╕реНрде рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╡рд┐рдВрдбреЛрдЬ рдЧреЗрдЯрд╡реЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рдж (рд╣рд╛рдБ рд╡рд╣рд╛рдБ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдФрд░ рдХреЗрд░реАрдУ рд╡рд┐рдирд░реВрдЯ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдерд╛) рдФрд░ рд╕реЗрдВрдЯреЛрд╕ 6 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЧреЗрдЯрд╡реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рдирд┐рд░рдВрддрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред

рдбрд╛рдпрдирд╛рдорд┐рдХ рдбреАрдПрдирдПрд╕ рд╕реЗрд╡рд╛рдУрдВ (рд╣реЛрдо рд░рд╛рдЙрдЯрд░ рдкрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдиреБрднрд╡ рдерд╛, рдЗрд╕рд▓рд┐рдП dyndns.org рдкрд░ рдПрдХ рдЕрд▓рдЧ рдЦрд╛рддрд╛ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рдЗрдирдбреАрди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреИрд╕рд╛ рдХрд┐ dyndns.org рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ)ред

рдЙрд╕рдХреЗ рдмрд╛рдж 2 рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЧрдИрдВред рджреЛрдиреЛрдВ рддрд╛рдЬ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ, рджреВрд╕рд░рд╛ рд╣рд░ рд╣рдлреНрддреЗред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрджрд┐ рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЖрдИрдкреА рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж, dyndns.org рдмрд╕ рдЦрд╛рддреЗ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рдЬрд╛рдХрд░ рдлрд┐рд░ рд╕реЗ рдЕрдирд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рдЖрдИрдкреА рдХреЛ dyndns.org рдкрд░ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рдЕрд╕рд▓реА рдЖрдИрдкреА рдбреЛрдореЗрди рдирд╛рдо рдореЗрдВ dyndns.org рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ dyndns.org рд╕реЗрд╡рд╛ рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рди рднреВрд▓реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рд╕реЗ, рдореБрдлреНрдд рдореЛрдб рдореЗрдВ, рдпрджрд┐ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ dyndns.org рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЦрд╛рддрд╛ рдлрд┐рд░ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрд╢рд╛ рдЖрдИрдкреА рднреЗрдЬрддреА рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдмрджрд▓ рди рдЧрдИ рд╣реЛред

рджрд░рдЕрд╕рд▓ рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреБрджред
рдкрд╣рд▓рд╛ рдЖрдИрдкреИрдбрдбреЗрдЯ:
#!/bin/sh logger -t ipupdate "UPDATING IP START" # HOSTNAME is your DynDNS hostname HOST2=my-remote-server.dyndns.org HOST3=my-remote-server-other.dyndns.org # NSLOOKUP is the current DNS entry for your DynDNS hostname OLD_IP2=`/usr/bin/nslookup -sil $HOST2 | tail -2 | head -1 | cut -d" " -f2 | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` if [ "$OLD_IP2" = "" ] ; then logger -t ipupdate "Not entry IP for $HOST2. Second empty..." OLD_IP2=`ping $HOST2 -c 1 | head -1 | cut -d" " -f3 | sed 's/(//' | sed 's/)//' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` fi if [ "$OLD_IP2" = "" ] ; then logger -t ipupdate "Not entry IP for $HOST2. Second empty: FAILED" fi OLD_IP3=`/usr/bin/nslookup -sil $HOST3 | tail -2 | head -1 | cut -d" " -f2 | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` if [ "$OLD_IP3" = "" ] ; then logger -t ipupdate "Not entry IP for $HOST3. Second empty..." OLD_IP3=`ping $HOST3 -c 1 | head -1 | cut -d" " -f3 | sed 's/(//' | sed 's/)//' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` fi if [ "$OLD_IP3" = "" ] ; then logger -t ipupdate "Not entry IP for $HOST1. Second empty: FAILED." fi if [ "$OLD_IP2" = "" ] && [ "$OLD_IP3" = "" ] ; then logger -t ipupdate "CHECKING INTENAL IP FAILED" logger -t ipupdate "EXIT" exit fi # Services for check external ip CHECK_IP0='ifconfig.me/ip' CHECK_IP1='http://checkip.dyndns.com' CHECK_IP2='http://2ip.ru' CHECK_IP3='http://www.netins.net/dialup/tools/my_ip.shtml' logger -t ipupdate "$HOST2 has IP: $OLD_IP2" logger -t ipupdate "$HOST3 has IP: $OLD_IP3" logger -t ipupdate "Check external IP throw $CHECK_IP0" CURRENT_IP=`/usr/bin/curl $CHECK_IP0 | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` if [ "$CURRENT_IP" = "" ]; then logger -t ipupdate "Checking external IP throw $CHECK_IP0 FAILED" logger -t ipupdate "Check external IP throw $CHECK_IP2" CURRENT_IP=`/usr/bin/lynx -dump $CHECK_IP1 | awk '/Current IP Address:/ { print $4; }' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` fi if [ "$CURRENT_IP" = "" ]; then logger -t ipupdate "Checking external IP throw $CHECK_IP1 FAILED" logger -t ipupdate "Check external IP throw $CHECK_IP2" CURRENT_IP=`/usr/bin/lynx -dump $CHECK_IP2 | awk '/ IP :/ { print $4; }' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` fi if [ "$CURRENT_IP" = "" ]; then logger -t ipupdate "Checking external IP throw $CHECK_IP2 FAILED" logger -t ipupdate "Check external IP throw $CHECK_IP3" CURRENT_IP=`/usr/bin/lynx -dump $CHECK_IP3 | grep -A2 "Your current IP Address is:" | tail -n1 | tr -d ' '|sed '/^$/d'| sed 's/^ *//g' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` fi if [ "$CURRENT_IP" = "unknown" ] || [ "$CURRENT_IP" = "" ] ; then logger -t ipupdate "Checking external IP throw $CHECK_IP3 FAILED" logger -t ipupdate "CHECKING EXTERNAL IP FAILED" logger -t ipupdate "EXIT" exit fi logger -t ipupdate "Real IP: $CURRENT_IP" if [ "$OLD_IP2" != "$CURRENT_IP" ] || [ "$OLD_IP3" != "$CURRENT_IP" ] ; then logger -t ipupdate "IP need to update" if [ "$OLD_IP2" != "$CURRENT_IP" ] ; then inadyn --input_file /etc/inadyn/remote1.conf fi if [ "$OLD_IP3" != "$CURRENT_IP" ] ; then inadyn --input_file /etc/inadyn/remote2.conf fi logger -t ipupdate "sleeping for 30 sec" sleep 30 logger -t ipupdate "daemon for updating has stoped" killall inadyn # Flush local DNS cache of $HOSTNAME /sbin/service named restart else logger -t ipupdate "Current IP is actual" fi logger -t ipupdate "UPDATING IP FINISHED" exit 

my-remote-server.dyndns.org рдФрд░ my-remote-server-other.dyndns.org рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд╛рддреЛрдВ рд╕реЗ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдореБрдЭреЗ 2 рд╕реЗ рдЕрдзрд┐рдХ DNS рдирд╛рдо рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ 2 рдЦрд╛рддреЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдПред IP рдкрддреЗ рдХреА рдЬрд╛рдБрдЪ рд╕рднреА DNS рдирд╛рдореЛрдВ рдкрд░ рдЬрд╛рддреА рд╣реИред
Remote1.conf рдФрд░ Remote2.conf - dyndns.org рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд╛рддреЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ - рдорд╛рдирдХ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдХрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рджреВрд╕рд░рд╛ ipupdWeek:
 #!/bin/sh logger -t ipupdWeek "WEEK UPDATING IP START" # script name of updating IP script='ipupdate' # check for running of script of update IP scriptRunning=`/bin/ps aux | grep $script | grep -v 'grep'` if [ "$scriptRunning" = "" ]; then logger -t ipupdWeek "Script of updating IP IS NOT running" echo "Not running" else logger -t ipupdWeek "Script of updating IP IS RUNNING, killall it" killall $script fi logger -t ipupdWeek "Start inadyn to update all IP" inadyn --input_file /etc/inadyn/remote1.conf inadyn --input_file /etc/inadyn/remote2.conf logger -t ipupdWeek "Sleeping 10 sec" sleep 10 logger -t ipupdWeek "Stop inadyn" killall inadyn logger -t ipupdWeek "WEEK UPDATING IP STOP" exit 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдпреЗ 2 рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╡рд░реНрддрдорд╛рди рдЖрдИрдкреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реЗрд╡рд╛рдПрдВ) 2 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд┐рдЬрд▓реА рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИрдВ - 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (рддрд╛рдЬ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдореИрдВ рдлрд┐рд░ рд╕реЗ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред

PS рдореИрдВ рдХреБрдЫ рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдордп рдореБрдЭреЗ рдЗрди рд▓рд┐рдкрд┐рдпреЛрдВ рдкрд░ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рд╕рдордп рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

PPS рдЗрди рд╕рдм рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП - рдореЙрдбреЗрдо рдХреЛ рд░рд╛рдЙрдЯрд░ рдореЛрдб рдореЗрдВ (рд╕реНрд╡рдпрдВ рдкреЛрд░реНрдЯ рдЕрдЧреНрд░реЗрд╖рдг рджреНрд╡рд╛рд░рд╛) рдФрд░ рдореЙрдбреЗрдо рдореЗрдВ рд╣реА рдбрд╛рдпрдиреНрдбрдиреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
рдЙрд╕ рд╕рдордп, рдЬрдм рдпрд╣ рд╕рдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореЙрдбреЗрдо рд░рд╛рдЙрдЯрд░ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рддреБрд▓рд╛ рд╣реБрдЖ рдерд╛ред рдЕрдм рдПрдХ рдирдП рдореЙрдбреЗрдо рдХреЗ рд╕рд╛рде - рдореБрдЭреЗ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рднрдЧрд╡рд╛рди рдХреА рдЦрд╛рддрд┐рд░ рдЗрд╕реЗ рдЫреВрдирд╛ рдирд╣реАрдВ рд╣реИ" (рдЧ)ред

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


All Articles