ipftp.pl (IPアドレス自動登録(変更)プログラム)



インストールの方法

注意:ipftp.plをカスタマイズしてインストールするには、ある程度 FreeBSD (UNIX) やホームページの構造やFTPについての知識が必要になります。これらが良くわからない方は、決してインストールしないで下さい。また、このソフトを利用することによって障害が起きても、責任は一切負いません。個人の責任においてインストール及びご利用下さい。改造すればLinuxに応用が出来ると思います。

1. プライベートサーバーにジャンプする元のホームページアドレスを決めます。

ここでは、構成図のように、 http://www.catv123.ne.jp/~my_id/temp/ としますので
自分のホームページをおく場所となる public_html の中に 「temp」 というディレクトリーを作ってください。

2. 「index.html」「index2.html」を作成し、1.で作成したディレクトリーの中に入れます。

http://www.catv123.ne.jp/~my_id/temp/index.html
(public_html/temp/index.html)

index.html

<html>
<HEAD>
<TITLE>ひみつのサーバー</TITLE>
</HEAD>

<frameset rows="100%,*">
<frame src="index2.html">
</frameset>
<noframes>
<body>
<a href="index2.html">こちらから入ってください。</a><p>
</body>
<noframes>
</html>

http://www.catv123.ne.jp/~my_id/temp/index2.html 
(public_html/temp/index2.html)

index2.html

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<P ALIGN=CENTER><META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://210.000.000.000/~my_id/"><BR>
</P>

</BODY>
</HTML>

これにより、http://www.catv123.ne.jp/~my_id/temp/ にアクセスすると、
http://www.catv123.ne.jp/~my_id/temp/index.html が読み込まれてフレームを作り、中身として、
http://www.catv123.ne.jp/~my_id/temp/index2.html が読み込まれます。そして、ここから
index2.html に記載したジャンプ先 http://210.000.000.000/~my_id/ へジャンプする。
(http://210.000.000.000/~my_id/index.html へジャンプする)
wwwブラウザのURLの表示には、http://www.catv123.ne.jp/~my_id/temp/ が表示されている。

ipftp.pl が この index2.html をFTPでgetし、プライベートサーバーのIPアドレスに書き換えてputする。

http://210.000.000.000/~my_id/index.html が表示できるように、apache等のwwwサーバーが動いていることを前提に説明が進んでいきますので、apacheがインストールされていない場合は、ここでapacheをインストールしてください。

3. perl5がインストールされていない場合はperl5をインストールします。

#which perl5 で、/usr/local/bin/perl5 と表示されない場合は、perl5がインストールされていません。
#which perl で、/usr/bin/perl と表示されたら、
#/usr/bin/perl -v でバージョンを確認して、This is perl, version 4.0 ならperl5をインストールして下さい。

#/stand/sysinstall でCD-ROMからperl5をインストールするか
perl-5.00502.tgz をFTPサイトからダウンロードして、#pkg_add perl-5.00502.tgz でインストールして下さい。
リブートして、
#which perl5 で、/usr/local/bin/perl5 と表示され、
#/usr/local/bin/perl5 -v でバージョン5の表示があればインストールは終了です。

4. CPANの(ftp用モジュール)ライブラリーをインストールして、perlでFTPが使えるようにします。

ftp://www.perl.com/pub/perl/CPAN/modules/by-module/Net/ から libnet-1.0606.tar.gz をダウンロードする

#tar -zxvf libnet-1.0606.tar.gz (tar -xvf libnet-1.0606.tar ←の場合)
# 解凍したディレクトリーに入って (cd libnet-1.0606)
# perl5 Makefile.PL (質問に答える (ほぼデフォルトで問題ないと思います))
# make
# make test
# make install

これでインストールは終了です。

5. ipftp.pl を自分の環境に合うように書き換えて、プライベートサーバーの /root に入れます。

#!/usr/local/bin/perl5
# ↑このパスはサーバーによって違うので調べて設定します。#★必要時変更

#シェルコマンドifconfigでマシンのアドレスの行を取り出す(FreeBSD用)
system("ifconfig -a | grep 210. >$tmp1_file"); #★必要時変更

これは、プライベートサーバーの端末で、実際に、
#ifconfig -a を実行してみて、自分のIPアドレスが表示されているかを確認して、
#ifconfig -a | grep 210. は「210.」がつく行だけを表示するという意味である。
これ↑で、IPアドレスの行だけが表示されるようになっているか確認する
割り当てられるアドレスが200.***.***.***なら、「200.」とすればよい。

例.
# ifconfig -a
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 210.aaa.bbb.ccc netmask 0xfffffff0 broadcast 255.255.255.255
ether 00:40:26:3b:34:29

# ifconfig -a | grep 210.
inet 210.aaa.bbb.ccc netmask 0xfffffff0 broadcast 255.255.255.255

$st = index($_,"210.") ; #取り出し開始文字位置(012345...) #★必要時変更
$en = index($_,"netmask") - 1; #取り出し終了文字位置 #★必要時変更

# ifconfig -a | grep 210.
inet 210.aaa.bbb.ccc netmask 0xfffffff0 broadcast 255.255.255.255

↑これの行から、IPアドレスだけを取り出すための設定で「取り出し開始文字位置="210."」と「取り出し終了文字位置="netmask"の左のスペース1を引いたところ」
になるようにする。

$st = index($_,"210.") ; #取り出し開始文字位置(012345...) #★必要時変更

割り当てられるアドレスが200.***.***.***なら、「200.」とすればよい。

# $infile = 'ipftp.old';#変換前の入力ファイル #★必要時変更
# $outfile = 'ipftp.new'; #変換後の出力ファイル #★必要時変更
#
# system("cd /root"); #★必要時変更
# system("cp /etc/natrules ipftp.old"); #★必要時変更
# &conv;
# system("cp ipftp.new /etc/natrules"); #★必要時変更

ローカル(プライベートサーバー)の中のファイルを書き換えたいときの参考として下さい。
利用するときは、一番左の#を取って下さい。

$Host = 'www.catv123.ne.jp'; # ftp先 ホストを指定 ★必要時変更
$User = 'my_id'; # ftp先 のアカウントを指定 ★必要時変更
$Password = 'my_pass'; # ftp先 のパスワードを指定 ★必要時変更
$TopDir = 'public_html/temp'; # ftp先 のディレクトリー ★必要時変更

&ftp_con; #ftpの接続

###########ファイルが複数の時は処理をこのように追加する########
$infile = 'index2.html';#変換前の入力ファイル ★必要時変更
&ftp_getput; #ftpからgetとして変換してputする(1つ目のファイル)
# ###########ファイルが複数の時は処理をこのように追加する########
# $TopDir = '../'; # public_html/index.htmlの場合 ★必要時変更
# $infile = 'index.html';#変換前の入力ファイル ★必要時変更
# &ftp_getput;

複数のファイルを変換する場合で、同じディレクトリー内の場合は、そのままファイル名だけの指定でよい。また、ディレクトリーが違うときは、次のようにディレクトリーを移動してファイル名を指定すること。

public_html
 +−−temp
 +   +−−index.html
 +   +−−index2.html
 +
 +−−temp2
 +   +−−index.html
 +   +−−index2.html ←次にこの場合

# ########ファイルが複数の時は処理をこのように追加する########
# $TopDir = '../temp2'; # public_html/temp2/index2.htmlの場合 ★必要時変更
# &ftp_getput;

などとすればよい

$st = index($_,"210.") ; #取り出し開始文字位置(012345...) #★必要時変更
if ($st > -1){
$en = index($_,"/~my_id"); #取り出し終了文字位置 #★必要時変更
# if ($en < 0) {$en = index($_,"/32 portmap");} #★必要時変更

ここでは変換するファイルの中(今回はindex2.html)のIPアドレス部分の位置を決める。

index2.html(書換前)
<P ALIGN=CENTER><META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://210.000.000.000/~my_id/"><BR>
</P>

index2.html(書換後)
<P ALIGN=CENTER><META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://210.aaa.bbb.ccc/~my_id/"><BR>
</P>

その他の注意点:ipftp.plには、FTPのパスワードが入るので、他人に見られないように、rootの権限でファイルを作り、他人には見られないようにしておきましょう。

#cd /root
#chown root ipftp.pl
#chmod 700 ipftp.pl

6. テストしてみましょう

#cd /root
#ls -l

-rw-r--r-- 2 root wheel 450 Nov 30 14:15 .cshrc
-rw------- 1 root wheel 442 Mar 5 18:39 .history
-rw-r--r-- 1 root wheel 122 Nov 30 14:15 .klogin
-rw-r--r-- 1 root wheel 525 Nov 30 14:15 .login
-rw-r--r-- 2 root wheel 207 Nov 30 14:15 .profile
-rwx------ 1 root wheel 6286 Apr 24 23:11 ipftp.pl

#perl5 ipftp.pl で実行します。

ipftp.plをなにも書き換えずに実行すると
# perl5 ipftp.pl
done... ifconfig
done... IP address get
old address is ( )
new address is 210.aaa.bbb.ccc (210_aaa_bbb_ccc)
IP Address is changed.
Connecting... to www.catv123.ne.jp Please wait!
can not Net::FTP "www.catv123.ne.jp": at ipftp.pl line 133.
となり、途中で止まります。これは、www.catv123.ne.jp が存在しないのでエラーになりました。

#ls -l でファイルをみると

-rw-r--r-- 2 root wheel 450 Nov 30 14:15 .cshrc
-rw------- 1 root wheel 442 Mar 5 18:39 .history
-rw-r--r-- 1 root wheel 122 Nov 30 14:15 .klogin
-rw-r--r-- 1 root wheel 525 Nov 30 14:15 .login
-rw-r--r-- 2 root wheel 207 Nov 30 14:15 .profile
-rw-r--r-- 1 root wheel 66 Apr 24 23:20 ipftp.ifc
-rw-r--r-- 1 root wheel 14 Apr 24 23:20 ipftp.ipa
-rwx------ 1 root wheel 6286 Apr 24 23:11 ipftp.pl

ipftp.ifc と ipftp.ipa の2つのファイルが出来ています。

#cat ipftp.ifc でファイルの中身を見てみると、
inet 210.aaa.bbb.ccc netmask 0xfffffff0 broadcast 255.255.255.255
のように、ifconfigの中の自分のアドレスの部分の行だけになっています。

#cat ipftp.ipa でファイルの中身を見てみると、
210.aaa.bbb.ccc
のように、IPアドレスだけのデータになっているはずです。

7. 実際に

プライベートサーバーの起動時に、自動的に、ipftp.plが実行されるように、/etc/rc.local に追加します。

cd /root
/usr/local/bin/perl5 ipftp.pl

手動で実行するときは、#perl5 ipftp.pl で実行します。

あとは、実際にFTP出来ているかを確認すればインストールは終了です。

2回目以降に、ipftp.plを実行すると、ipftp.ipa(過去のIPアドレス) と現在のIPアドレスを比較して、違っているときだけFTPをしますが、同じ時はFTPせずに終了します。従って、FTPのテストがしたい場合は、ipftp.ipaを消してからテストを行って下さい。

#cd /root
#rm ipftp.ipa
#perl5 ipftp.pl

成功した場合のメッセージ

# perl5 ipftp.pl
done... ifconfig
done... IP address get
old address is ( )
new address is 210.aaa.bbb.ccc (210_ aaa_bbb_ccc)
IP Address is changed.
Connecting... to www.catv123.ne.jp Please wait!
login...
binary mode
cd public_html/temp
getting public_html/temp/index2.html
putting public_html/temp/index2.html

8. 継続使用する場合は、、、、

このプログラムはシェアウエアです。試用期間1ヶ月を越えて継続して使う場合や改造して使う場合は、必ずシェアウエア登録をしてくださいね。



戻る