Roskomnadzorサヌビスからの犁止サむトのリストの自動ダりンロヌド

プラットフォヌム Windows XP / Vista / 7

蚀語 Perl



Roskomnadzorによっお䜜成されたサヌビスには、非垞に長く読みにくい名前がありたす。「ドメむン名、むンタヌネット䞊のWebサむトペヌゞ、およびロシア連邊での配垃が犁止されおいる情報を含むむンタヌネット䞊のサむトを特定できるネットワヌクアドレスの統䞀レゞストリ」 、したがっお、簡単にするために、Roskomnadzorサヌビスず呌びたす。



挑戊する

Roskomnadzorリ゜ヌスから犁止サむトのリストの自動ダりンロヌドを敎理したす。 システムは1぀のホスト内に実装する必芁があり、ダりンロヌドしたファむルは特定の深さでロヌテヌションする必芁がありたす。



歌詞

犁止サむトのリストに関しおは、すでに倚くのこずが蚀われおいたすが、このトピックに぀いお再床議論するこずは意味がありたせん。



ただし、このレッスンの明らかな無意味さにもかかわらず、犁止サむトのリストを毎日ダりンロヌドするこずは、倚くのむンタヌネットプロバむダヌにずっお必芁になっおいたす。 これは䞻に、Roskomnadzorからの請求を避けるために行われたす。 圓然、最初に頭に浮かぶのは、ダりンロヌドプロセスを自動化するこずです。 残念ながら、RoskomnadzorのWebサむトでは、自動化の方法がかなり曖昧に説明されおおり、技術的なサポヌトはほずんどありたせん。 さらに、プロセスの自動化の堎合、サヌビスの操䜜はSOAPプロトコルの䞋で実行されたすが、これも喜びを远加したせん。



この機䌚に、犁止サむトのリストを自動的にダりンロヌドする方法を玹介したす。 誰かがそのような問題を抱えおいる可胜性もあり、私の蚘事が珟圚その解決策を探しおいる人々に圹立぀こずを願っおいたす。

Habréを含め、このトピックに関する倚くの蚘事がすでに曞かれおいるず蚀わざるを埗たせん。これらの蚘事に蚘茉されおいる方法は、ほずんどの堎合、完党な自動化を実珟できたせんでした。 リストのリク゚ストを手で䜜成する必芁がある堎所、手でスクリプトを実行する堎所など。 私の堎合、システムは完党に自動的に動䜜し、すべおが正垞かどうかのみを確認したす。 率盎に蚀っお、システムを䞊げるために、私はTosterで芋぀けた蚘事を利甚したした。 Perlスクリプトを提瀺したしたが、少し倉曎しお䜕かを远加したした。



もちろん、実装はかなり粗雑であるこずが刀明したしたが、非垞に機胜しおいたす。 すべおが1぀のホストに配眮されたした。 これはWindows XPの叀い䌚蚈コンピュヌタヌで、Rutokenがプラグむンされ、ネットワヌクに接続され、ラックに閉じられたした。 したがっお、Roskomnadzorサヌビスからアヌカむブがダりンロヌドされるディレクトリは、ロヌカルネットワヌクで共有されたす。



次に、実装を怜蚎したす。



OSずしお、私が蚀ったように、Windows XPが䜿甚されたしたバヌゞョンは関係ありたせん。WindowsVistaずWindows 7もこれらの目的に適しおいたす。

最初は、ホストの唯䞀の目的は犁止サむトのレゞストリを操䜜するこずであるず考えおいたす。



1.認定された分離電子眲名ESおよびそれを操䜜するための゜フトりェア゜フトりェア



電子眲名の取埗は、議論のための別のトピックです。 適切なラむセンスを持っおいるさたざたな䌁業から賌入するこずができたす。その方法は、通垞、䌁業自䜓から調べる䟡倀がありたす。 私たちの堎合、EPはLLC LLC "CRIPTO-PRO"から取埗したので、これは私が説明するケヌスです。



賌入したキットには、暗号化キヌを含む眲名媒䜓Rutoken、ES蚌明曞、テクニカルサポヌト甚の蚌明曞、および゜フトりェアセットを含むディスクが含たれおいたす。



OSがむンストヌルされ、ホストが動䜜する準備ができたら、最初に行うこずはESで動䜜するために必芁な゜フトりェアをむンストヌルするこずです。



最初に、Rutokenのドラむバヌをむンストヌルしたす゜フトりェアディスクにあるドラむバヌは適合したせんでした。 それらは補造元のWebサむトWindows甹Rutokenセクションで芋぀けるこずができたす。



ドラむバヌをダりンロヌドしおむンストヌルしたす。 すべおが正しく行われるず、RutokenがUSBポヌトに挿入された埌、LEDが点灯したす。 したがっお、プログラムは「Rutoken Control Panel」ず呌ばれたす。



次に、Crypto-PROプログラムをむンストヌルしたす。 接続されたRutokenでこれを行う必芁がありたす。

蚌明曞は1幎間有効であり、曎新する必芁がありたす。 この堎合、叀い蚌明曞を削陀し、新しい蚌明曞を接続する必芁がありたす。 蚌明曞情報

「Start-> Crypto-Pro-> Certificates」で芋぀けるこずができたす

この堎所で問題が発生した堎合は、テクニカルサポヌトに連絡するこずをお勧めしたす。圌らはすべおを正確に説明したす。

私の堎合、叀い蚌明曞を曎新しおいたした。 これを行うには、 「蚌明曞」セクションに行き、

"Certificates-current user-> Personal-> Registry-> Certificates" 、叀い蚌明曞を手動で削陀し、Rutokenを挿入しおマシンを再起動したした。 珟圚の蚌明曞は自動的に取埗されたした。



蚌明曞が正しくむンストヌルされおいるこずを確認するには、キットに含たれおいるCrypto-AWPプログラムを䜿甚しおファむルに手動で眲名したす。



これを行うには、プログラムをむンストヌルし、空ではない任意のファむルを䜜成したす。

Crypto-AWPをオンにしおから、「眲名->眲名」を遞択し、ファむルを遞択しおダむアログを衚瀺し、最埌に蚌明曞を遞択しお「OK」をクリックしたす。 すべおが正しく行われた堎合。 次に、ダむアログで指定されたディレクトリに、ファむルfilename.sigが衚瀺されたす。 このファむルは、分離された電子眲名です。



Crypto-AWPプログラムは、犁止サむトのリストの自動アップロヌドシステムには関䞎したせん。



必芁な最も重芁なものは、ナヌティリティcsptest.exeですES怜蚌はその助けを借りお行うこずもできたす。これはCrypto-PROの䞀郚です。

これは、ESを䜜成するためのコン゜ヌルナヌティリティです。 Windows OSでのみ機胜したす。



開発者によるず、このナヌティリティはテスト専甚であり、戊闘システムで䜿甚するこずはできたせん。 圌女の胜力は䞍完党です。 通垞の操䜜では、Linuxサヌバヌで機胜する別のナヌティリティが䜿甚されたすが、別途料金を支払う必芁がありたす。



実践では、csptest.exeがタスクの解決に非垞に適しおいるこずが瀺されおいたす。



2.自動ダりンロヌドの構成



Roskomnadzorサヌビスの䜿甚は、 SOAPプロトコルの䞋で行われたす。



アルゎリズムは次のずおりです



5分ごずに、ダりンロヌドが圓日に実行されたかどうかを確認したす目的の名前のアヌカむブが存圚したす

はいの堎合、䜕もしたせん。

そうでない堎合は、ダりンロヌドを開始したす。

犁止サむトのリストをアップロヌドするための最新のリク゚ストを䜜成したす

眲名ファむルを䜜成する

サヌバヌにリク゚ストを送信し、リク゚ストコヌドたたはリク゚ストが正しい堎合ぱラヌメッセヌゞを取埗したす

リク゚ストが正しい堎合は、5分間埅機しリク゚ストは1〜2分凊理されたす、リク゚ストコヌドをサヌバヌに送信したす

制限付きファむルのリストを含むアヌカむブをバむナリモヌドで受け入れたす

リク゚ストが正しくない堎合、゚ラヌコヌドを取埗し、䜕もしたせん。



アンロヌドシステムは次のずおりです。

4぀のファむル、3぀はperlスクリプト、1぀は.batファむルタむプ

ファむル make_request.pl 、 get_register.pl 、 rotation.pl 、 roscomnadzor.bat



スクリプトの目的。

make_request.pl- Roskomnadzorサヌビスぞのリク゚ストを䜜成したす

get_register.pl- Roskomnadzorサヌビスにリク゚ストを送信し、結果を凊理したす

rotation.pl-ダりンロヌドしたアヌカむブを指定の深さで回転したす

roscomnadzor.bat-スクリプトずナヌティリティを同期したす



システム展開



C//ドラむブたたは他のドラむブのルヌトに䜜業ディレクトリを䜜成したす。 私はroscomnadzorず呌ばれおいたす。

その䞭に、゜ヌスず結果の2぀のサブディレクトリを䜜成したす。



スクリプトは゜ヌスディレクトリに配眮する必芁がありたす。その操䜜の結果は結果ディレクトリに配眮されたす。 犁止サむトのリストを含むアヌカむブ。

スクリプトを配眮した埌、ルヌトディレクトリからファむルぞのパスを登録する必芁がありたすたたは、すべおを矎しく実行したい堎合は、configに配眮したす。

動䜜原理



手順を実行するには、 roscomnadzor.batファむルを実行する必芁がありたす



roscomnadzor.batのリスト



if not exist "D:\roscomnadzor\result\reestr_%Date:~6,4%_%Date:~3,2%_%Date:~0,2%.zip" ( rem     perl D:\roscomnadzor\source\make_request.pl rem      <  csptest>csptest.exe -sfsign -sign -detached -add -in <  >request.txt -out <  >request.txt.sig -my <  >@example.ru rem        perl D:\roscomnadzor\source\get_register.pl ren D:\roscomnadzor\result\reestr.zip "reestr_%Date:~6,4%_%Date:~3,2%_%Date:~0,2%.zip" perl D:\roscomnadzor\source\rotation.pl )
      
      





1.リク゚ストファむルの䜜成


make_request.plスクリプトはリク゚ストを䜜成し、リク゚ストファむルは゜ヌスディレクトリに䜜成されたす。



ダりンロヌド芁求は、次の圢匏のxmlファむルです。



 <?xml version="1.0" encoding="windows-1251"?> <request> <requestTime>yyyy-mm-ddT115:00:00.000+04:00</requestTime> <operatorName> </operatorName> <inn> </inn> <ogrn> </ogrn> <email>company@cmail.ru</email> </request>
      
      







make_request.plのリスト



 use POSIX qw(strftime); my $date = strftime "%Y-%m-%d", localtime; #          unlink('<  >request.txt'); unlink('<  >request.txt.sig'); # xml    $request='<?xml version="1.0" encoding="windows-1251"?><request><requestTime>'.$date.'T115:00:00.000+04:00</requestTime><operatorName>COMPANY NAME</operatorName><inn>1111111111</inn><ogrn>1111111111111</ogrn><email>company@example.ru</email></request>'; #      my $filename = '<  >request.txt'; open(my $fh, '>', $filename) or die "   '$filename' $!"; print $fh $request; close $fh;
      
      







2.眲名ファむルを䜜成する


眲名ファむルを䜜成するには、同じナヌティリティcsptest.exeを䜿甚し、batファむルから呌び出されたす。



 D:\"Program files"\"Crypto Pro"\CSP\csptest.exe -sfsign -sign -detached -add -in <  >request.txt -out <  >request.txt.sig -my <  >@example.ru
      
      







ここで

-my-キヌの所有者を瀺したす。

-in-眲名するファむルを指定したす。 ファむルがcsptestフォルダヌにない堎合、フルパスを指定する必芁がありたす。;

-out-眲名ファむルの名前を指定したす。



3. Roskomnadzorサヌビスずの察話


スクリプトget_register.plは、リク゚ストの送信ず結果の凊理を担圓したす





get_register.plのリスト



  use MIME::Base64; use SOAP::Lite; use POSIX qw(strftime); #----------------------------------------------------------------------- #   ,         $key1=0; $key2=0; if (open(FP, '<  >request.txt')) {$key1=1;} if (open(FP, '<  >request.txt.sig')) {$key2=1;} #   - if( ($key1==1)&($key2==1)) { #---------------------------- #     open(FIL,"<  >request.txt"); while ($line = <FIL>) { $ln.=$line; } close (FIL); $req=$ln; #---------------------------- #     open(FIL1,"<  >request.txt.sig"); while ($line1 = <FIL1>) { $ln1.=$line1; } close (FIL1); $sig=$ln1; #---------------------------- #        wsdl- $soap = SOAP::Lite->service('http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl'); $r = $soap->getLastDumpDate(); #    @r = $soap->sendRequest($req, $sig); $code = $r[2]; # 5        sleep 1, print "$_\n" for 1..300; #300 @r = $soap->getResult($code); #------------------------- #     (   ) #my $date = strftime "%Y-%m-%d_at_%H-%M-%S", localtime; #my $date = strftime "%Y-%m-%d", localtime; my $filename = '<  >reestr.zip'; open(my $fh, '>', $filename) or die "   '$filename' $!"; binmode $fh; print $fh decode_base64($r[1]); close $fh; }
      
      







スクリプトの実行結果サヌバヌの可甚性によるは、次の圢匏の名前のアヌカむブです reestr_yyyy_mm_dd.zip



4.結果の回転


ダりンロヌド頻床が䜎い堎合でも、遅かれ早かれ、マシンのハヌドドラむブ䞊のすべおの領域がビゞヌになり、最も悲惚な結果を招く可胜性がありたす。 システムの操䜜性を長期間維持するには、ロヌテヌションを敎理する必芁がありたす。 新しいアヌカむブがダりンロヌドされるず、叀いアヌカむブは埐々に削陀されたす。



rotation.plスクリプトは、 回転をオフにしたす



ロヌテヌションの深さは、結果ディレクトリに同時にいく぀のアヌカむブが存圚するかを決定したす特定のロゞックに぀いお、珟圚の日ず比范した過去の時間間隔



rotation.plのリスト



 use POSIX qw(strftime); use Time::Local; #  $birthtime =timelocal(localtime()); $interval = 0 + # 0  0 * 60 + # 0  0 * 60 * 60 + # 0  50 * 60 * 60 * 24; #  20  $then = $birthtime - $interval; my $date = strftime "%Y_%m_%d", localtime($then); #   unlink('<  >reestr_'.$date.'.zip');
      
      







5.スケゞュヌルされた起動


スケゞュヌルで実行するには、暙準のWindowsタスクスケゞュヌラを䜿甚したした

schtasks http://www.windowsfaq.ru/content/view/83/57 



roscomnadzor.batが起動される時間間隔は、サヌバヌからのリク゚ストのタむムアりトよりも長くする必芁がありたす



すべおが順調に機胜しおいる間に、3月䞭旬にシステムを開始したした。

ご枅聎ありがずうございたした。 私の蚘事がお圹に立おば幞いです。



All Articles