рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпреИрдВрдбреЗрдХреНрд╕ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдореЗрд▓ рд╕рд╣рд╛рдпрддрд╛ рдореЗрдВ рдЧрдпрд╛ рдФрд░ рдЙрд╕реЗ рд╡рд╣рд╛рдВ рджреЗрдЦрд╛ - рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд
DNS рдПрдкреАрдЖрдИ ред
рдФрд░ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд░реНрдл 2 рдорд╣реАрдиреЗ рдкреБрд░рд╛рдиреЗ
рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдореВрд▓ dDNS рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЪреВрдВрдХрд┐ C рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреА рддрд╛рдХрдд рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рди рддреЛ рдкрд╛рдпрдерди рдФрд░ рди рд╣реА рдкрд░реНрд▓ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдореЛрддреА рдкрд░ рдХрд░реЗрдВрдЧреЗред
рдХреБрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛:
- рдЧрддрд┐рд╢реАрд▓ рдмрд╛рд╣рд░реА рдЖрдИрдкреА
- Yandex рдбреЛрдореЗрди рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд
- рдбреЗрдмрд┐рдпрди рд░рд╛рдЙрдЯрд░
рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдкреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ:
рдЙрдк рдЧреЗрдЯрд┐рдк {
( рдореЗрд░реЗ $ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ , рдореЗрд░реЗ $ ipconf ) = @_ ;
$ ipconf = рдкрд░рд┐рднрд╛рд╖рд┐рдд ( $ ipconf ) ? $ ipconf : '/ sbin / ip' ;
рдореЗрд░реЗ $ Res = `ip a s $ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ | grep "inet" ` or die ( " IP рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА: " ; $! ) ред
рдЕрдЧрд░ ( $ res = ~ / ( тЦ║ddelines1,3[. {
рд╡рд╛рдкрд╕реА $ 1 ;
}
рдорд░реЛ ( "рдЖрдИрдкреА рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛" ) ;
}
рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд╣рд▓рд╛ рдЖрдИрдкреА рд▓реЗрддреЗ рд╣реИрдВред
рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдкреАрдЖрдИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдВрдЪ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдлреЗрдВрдХ рджреЗрдВ:
рдЙрдк рдпрд╛рдкреА {
рдореЗрд░реЗ $ url = $ _ [ 0 ] ;
рдорд░реЛ 'рдирд╣реАрдВ URL рдореЗрдВ рдкрд░рдо yapi func'
рдЬрдм рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( $ url ) ;
рдореЗрд░реЗ $ cont = $ ua -> get ( $ url ) ;
'HTTP рддреНрд░реБрдЯрд┐:' , $ cont -> status_line
рдЬрдм рддрдХ $ cont -> is_success рдирд╣реАрдВ рд╣реИ ;
рдорд░ 'рдирд╣реАрдВ XML, рджрд┐рдпрд╛' , $ cont -> content_type
рдЬрдм рддрдХ $ cont -> content_type eq 'text / xml' ;
рдореЗрд░рд╛ $ рд╕рдореНрдорд╛рди = XML :: рд╕рд░рд▓
-> рдирдпрд╛ ( )
-> XMLin ( $ cont -> рд╕рд╛рдордЧреНрд░реА ) ;
рдбрд╛рдИ 'рдПрдкреАрдЖрдИ рддреНрд░реБрдЯрд┐:' , $ рд╕рдореНрдорд╛рди -> { рдбреЛрдореЗрди } -> { рддреНрд░реБрдЯрд┐ }
рдЬрдм рддрдХ $ рд╕рдореНрдорд╛рди -> { рдбреЛрдореЗрди } -> { рддреНрд░реБрдЯрд┐ } eq 'ok' ;
рд╡рд╛рдкрд╕реА ( $ рд╕рдореНрдорд╛рди -> { рдбреЛрдореЗрди } -> { рдбреЛрдореЗрди } ) ;
}
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЖрдЗрдП XML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпреИрдВрдбреЗрдХреНрд╕ рдиреЗ рдПрдкреАрдЖрдИ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХреА рд╣реИред
рдЕрдм рдореБрдЦреНрдп рднрд╛рдЧ:
#! / usr / рдмрд┐рди / рдкрд░реНрд▓
# рдбреЛрдореЗрди рдирд╛рдо
рдореЗрд░рд╛ $ рдбреЛрдореЗрди = 'example.org' ;
# рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди
рдореЗрд░реЗ $ рдЯреЛрдХрди = '1bdf72e04d6b50c82a48c7e4dd38cc6920116dfd6774a9e7b32eddfe' ;
# рдирдпрд╛ рдЖрдИрдкреА, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реБрдЖ
#, рдЕрд░реНрдерд╛рддреН, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ред/yaddns.pl ppp0
рдореЗрд░реЗ $ рдХрд░рдВрдЯ = getip ( $ ARGV [ 0 ] ) ;
рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ;
LWP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ :: UserAgent ;
XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ :: рд╕рд░рд▓ ;
# рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ :: рдбрдореНрдкрд░; # рдбреЗрдмреНрдпреВ рдХреЗ рд▓рд┐рдП!
рдореЗрд░реЗ $ ua = LWP :: UserAgent -> рдирдпрд╛ ;
$ ua -> рдПрдЬреЗрдВрдЯ ( "pD.yandex.ru рдХреЗ рд▓рд┐рдП dDNS рдХреНрд▓рд╛рдЗрдВрдЯ" ) ;
рдореЗрд░реЗ $ рдбреЛрдореЗрди = yapi ( 'https://pddimp.yandex.ru/nsapi/get_domain_records.xml?token=' $ рдЯреЛрдХрди ред '& рдбреЛрдореЗрди =' ред $ рдбреЛрдореЗрди ) - { рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ } -> { рд░рд┐рдХреЙрд░реНрдб } ;
рдЬрдмрдХрд┐ ( рдореЗрд░рд╛ ( $ record_id , $ record ) = рдкреНрд░рддреНрдпреЗрдХ ( % $ рдбреЛрдореЗрди рд╕реВрдЪреА ) ) {
# рдЫрд╛рдк рдбрдореНрдкрд░ ($ рд░рд┐рдХреЙрд░реНрдб);
if ( $ рд░рд┐рдХреЙрд░реНрдб -> { type } eq 'A' && $ currentip ne $ record -> { content } ) {
рдореЗрд░рд╛ $ рдЕрджреНрдпрддрди = 'https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=' ред $ рдЯреЛрдХрди
ред 'рдФрд░ рдбреЛрдореЗрди =' ред $ рдбреЛрдореЗрди ред 'рдФрд░ рдЙрдкрдбреЛрдореЗрди =' ред $ рд░рд┐рдХреЙрд░реНрдб -> { рдЙрдкрдбреЛрдореЗрди }
ред '& record_id =' ред $ record_id 'рдФрд░ рд╕рд╛рдордЧреНрд░реА =' ред $ рдХрд░рдВрдЯ ;
'рдЕрдкрдбреЗрдЯ рд░рд┐рдХреЙрд░реНрдб' рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ ред $ record_id '(рдореЗрдЬрдмрд╛рди) ред $ рд░рд┐рдХреЙрд░реНрдб -> { рдЙрдкрдбреЛрдореЗрди } ред ") \ n " ;
рдпрд╛рдкреА ( $ рдЕрдкрдбреЗрдЯ ) ;
}
}
рд╕рд┐рдо, рд╣рдо рдЗрд╕ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдП-рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВред рдЕрдм рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЙрдард╛рддреЗ рд╕рдордп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЪреБрдкрдЪрд╛рдк рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ: рдбреЗрдмрд┐рдпрди рдХреЗ рддрд╣рдд, рдЖрдкрдХреЛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдВрдХреБрд▓ libcrypt-ssleay-perl, libxml-simple-perl рдФрд░ libwww-perlред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджрд┐рд╕рдВрдмрд░ 2014 рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред