先日公開したIPアドレス国確認ですが、早速機能追加を行いました。
追加機能は以下のとおりです。
・検索結果に指定したIPアドレスのホスト名を表示
まあ大した機能ではないですが、別で確認するのも面倒なので纏めて表示したほうが便利かなと思って追加しました。
2018年10月30日火曜日
2018年10月26日金曜日
グローバルIPアドレスの国を確認するサイトを作りました!
2018年10月25日木曜日
特殊な用途のIPアドレス
IPv4は0.0.0.0~255.255.255.255の範囲までで表現されますが、この中で利用用途が特定されているIPアドレスが幾つかあります。
有名なものはプライベートIPアドレス、または先日紹介したシェアードIPアドレスなんてものもありますが、それ以外にも幾つか指定されています。
例えば169.254.0.0/16はリンクローカルアドレスと呼ばれていて、分かりやすいのはNICの設定がDHCPになっているのに、DHCPサーバからIPアドレスが取れないときに割り当てあられるアドレスですね。APIPA(Automatic Private IP Addressing)と呼ばれるやつです。
これら以外にも色々あって、RFC3330で定められています。また、最近のIPv4不足もあり、定められていた(もしくは予約されていた)ものの、グローバルIPに割り当てられる事になったIPアドレスもあります。
参考になりそうなサイト
特別なIPアドレスって知っていますか?
有名なものはプライベートIPアドレス、または先日紹介したシェアードIPアドレスなんてものもありますが、それ以外にも幾つか指定されています。
例えば169.254.0.0/16はリンクローカルアドレスと呼ばれていて、分かりやすいのはNICの設定がDHCPになっているのに、DHCPサーバからIPアドレスが取れないときに割り当てあられるアドレスですね。APIPA(Automatic Private IP Addressing)と呼ばれるやつです。
これら以外にも色々あって、RFC3330で定められています。また、最近のIPv4不足もあり、定められていた(もしくは予約されていた)ものの、グローバルIPに割り当てられる事になったIPアドレスもあります。
参考になりそうなサイト
特別なIPアドレスって知っていますか?
2018年10月24日水曜日
PHPで文字列を比較するときに==を利用するとうまくいかない
if文で文字列比較をしたのですが、ハマりました。
PHPだと==は予期せぬ動作をしそうなので、strcmp関数を利用したほうが良いようです。
一致で比較する場合は、以下のような使い方になります。
strcmp(比較する値1,比較する値2)==0
こちらのサイトを参考にさせて頂きました。
PHPで文字列を比較する方法と、型によりハマるポイント
PHPだと==は予期せぬ動作をしそうなので、strcmp関数を利用したほうが良いようです。
一致で比較する場合は、以下のような使い方になります。
strcmp(比較する値1,比較する値2)==0
こちらのサイトを参考にさせて頂きました。
PHPで文字列を比較する方法と、型によりハマるポイント
2018年10月23日火曜日
yyyymmddをyyyy/mm/ddにする
日付としてデータをもたせて、出力フォーマットを指定して、とか考えましたが、面倒なので今回は文字列操作で対応しました。
こんな感じです。
substr_replace(substr_replace('20181010','/',6,0),'/',4,0)
//結果
2018/10/10
こちらのサイトを参考にさせて頂きました。
PHPで文字列の指定した位置に文字列を挿入する方法
こんな感じです。
substr_replace(substr_replace('20181010','/',6,0),'/',4,0)
//結果
2018/10/10
こちらのサイトを参考にさせて頂きました。
PHPで文字列の指定した位置に文字列を挿入する方法
2018年10月22日月曜日
数字をカンマ区切りにする
PHPには数字をカンマ区切りにするという関数が存在するようです。
こんな感じで利用できるそうです。
<?php
$num = 100000000;
$num = number_format($num);
print $num . "円";
?>
こんな感じで利用できるそうです。
<?php
$num = 100000000;
$num = number_format($num);
print $num . "円";
?>
こちらのサイトを参考にさせて頂きました。
2018年10月21日日曜日
Postfix+Sendgridの組合せでメール配信環境を構築する
先日Gmailを利用してメールを配信できる環境を構築しました。
Postfix+Gmailの組合せでメール配信環境を構築する
この度、申請していたSendGrid利用の申請が承認されたので、SendGridを利用するように設定を変更してみます。
設定の仕方ですが、以下のサイトにまとまっています。
Postfix SendGrid
設定内容はGmailを利用する場合とほとんど同じですね。
で、早速メールを飛ばしてみました。
が、届かない!
確認したところ、メールを飛ばす処理でFromにGmailのアカウントを入れていたのが良くないようです。SendGridの申請時に指定したドメインのメールアドレスでないと届かないのですね。スパム利用対策として、正しい動作だと思います。
設定を変更して再度送付したところ、届きました!
ただ、本文の改行がなくなっています。
調べると以下の記載がありました。
よくある質問 ? メール改行トラブル編
それでも直らない!
SMTPでメールを送信する際に気をつけることはありますか?
というページでも改行のことに触れていますが、原因が不明。Gmailのときは普通に改行していたのに。。。
まあ、当面人にメールを送る運用は考えていないので、対応は保留にします。
原因が分かったら追記したいと思います。
Postfix+Gmailの組合せでメール配信環境を構築する
この度、申請していたSendGrid利用の申請が承認されたので、SendGridを利用するように設定を変更してみます。
設定の仕方ですが、以下のサイトにまとまっています。
Postfix SendGrid
設定内容はGmailを利用する場合とほとんど同じですね。
で、早速メールを飛ばしてみました。
が、届かない!
確認したところ、メールを飛ばす処理でFromにGmailのアカウントを入れていたのが良くないようです。SendGridの申請時に指定したドメインのメールアドレスでないと届かないのですね。スパム利用対策として、正しい動作だと思います。
設定を変更して再度送付したところ、届きました!
ただ、本文の改行がなくなっています。
調べると以下の記載がありました。
よくある質問 ? メール改行トラブル編
考えられる原因早速、対策で書いてあるHTML変換機能の無効化を実施しました。
テキストメールのHTML変換機能(以下、HTML変換機能)が有効になっていることが原因として考えられます。この機能は、元のテキストメール(Content-typeがtext/plain)の本文をHTML変換してマルチパートメール(Content-typeがmultipart/alternative)の1パートとして追加します。その際、改行コードはHTMLの改行タグに変換されません。このため、メールクライアントでtext/htmlパートを確認すると、変換されたメールの改行が削除されているように見えます。
それでも直らない!
SMTPでメールを送信する際に気をつけることはありますか?
というページでも改行のことに触れていますが、原因が不明。Gmailのときは普通に改行していたのに。。。
まあ、当面人にメールを送る運用は考えていないので、対応は保留にします。
原因が分かったら追記したいと思います。
2018年10月20日土曜日
グローバルIPアドレスを誰が管理しているのか?
グローバルIPアドレスはインターネットの世界で正常に通信を行うため、一意(重複するものがない状態)である必要があります。そのため、グローバルIPアドレスはしっかりと管理されており、その管理組織は階層構造となっています。
まず、頂点にいるのが、以下の組織です。
ICANN(Internet Corporation for Assigned Names and Numbers、アイキャン)
ICANNはIPアドレスの管理のほか、ドメインの管理、ルートネームサーバの運用などインターネットが正常に機能するための基本機能の運用を行っています。
その次に、各地域ごとに管理組織があります。
APNIC(アジア・オセアニア)
ARIN(北米)
RIPE NCC(欧州・中東)
LACNIC(中南米)
AFRINIC(アフリカ)
更にその次の階層として、国ごとの管理組織があります。
日本だとJPNICですね。
つまり、日本で利用されているグローバルIPアドレスは、以下の流れで払い出されているわけです。
ICANN→APNIC→JPNIC
更にJPNICからキャリアなどのIPアドレス管理指定事業者にアドレスが割り当てられ、そこから利用者に分配されます。
つまり、こうなります。
ICANN→APNIC→JPNIC→Pアドレス管理指定事業者→利用者
なお、各管理組織に割り当てられているIPアドレス情報は公開されており、FTPでリストをダンロードすることも可能です。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
このリストですが、アドレス帯がCIDRではなく、開始IPアドレスとそこから幾つ割り当てているか、という書きっぷりなんですよね。ちょっと見にくいです。
フォーマットは以下のサイトに解説があります。
RIR statistics exchange format
こういった管理組織ですが、国連や政府機関がやっているの?と思いきや、ICANNを含めて民間団体なんですよね。公的な動きをする団体ではあるものの、改めてインターネットは民間のものであると感じますね。
まず、頂点にいるのが、以下の組織です。
ICANN(Internet Corporation for Assigned Names and Numbers、アイキャン)
ICANNはIPアドレスの管理のほか、ドメインの管理、ルートネームサーバの運用などインターネットが正常に機能するための基本機能の運用を行っています。
その次に、各地域ごとに管理組織があります。
APNIC(アジア・オセアニア)
ARIN(北米)
RIPE NCC(欧州・中東)
LACNIC(中南米)
AFRINIC(アフリカ)
更にその次の階層として、国ごとの管理組織があります。
日本だとJPNICですね。
つまり、日本で利用されているグローバルIPアドレスは、以下の流れで払い出されているわけです。
ICANN→APNIC→JPNIC
更にJPNICからキャリアなどのIPアドレス管理指定事業者にアドレスが割り当てられ、そこから利用者に分配されます。
つまり、こうなります。
ICANN→APNIC→JPNIC→Pアドレス管理指定事業者→利用者
なお、各管理組織に割り当てられているIPアドレス情報は公開されており、FTPでリストをダンロードすることも可能です。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
このリストですが、アドレス帯がCIDRではなく、開始IPアドレスとそこから幾つ割り当てているか、という書きっぷりなんですよね。ちょっと見にくいです。
フォーマットは以下のサイトに解説があります。
RIR statistics exchange format
こういった管理組織ですが、国連や政府機関がやっているの?と思いきや、ICANNを含めて民間団体なんですよね。公的な動きをする団体ではあるものの、改めてインターネットは民間のものであると感じますね。
2018年10月19日金曜日
シェアードIPアドレスとは
前回の記事では、プライベートIPアドレスについて簡単に解説しました。IPアドレスの世界にはプライベートIPアドレス以外にも用途が決まっているアドレス帯があります。それが、 シェアードIPアドレス( シェアードアドレス)です。
IPv4のアドレスが不足していく中で、家庭や企業内でプライベートIPアドレスを利用するのと同様に、ISP(回線事業者)ごとに分けたネットワークを構築するというアイディアが生まれました。そうすれば、家庭や企業で最低1つ必要になるグローバルIPアドレスを減らすことができますからね。
ただ、このISP内のIPアドレスはプライベートIPアドレスというわけには行きません。プライベートIPアドレスだと、家庭、企業内のIPアドレスと重複してしまう可能性があるからです。そのため、新たに払い出されたIPアドレス帯がこのシェアードIPアドレスです。
具体的には以下のアドレスになります。
100.64.0.0/10
もし家庭用ルータのIPアドレスが上記アドレス帯であれば、これはシェアードIPアドレスでインターネットから直接はアクセスできない、と判断できるわけです。
参考サイト
シェアードアドレス 日経XTECH
IPv4のアドレスが不足していく中で、家庭や企業内でプライベートIPアドレスを利用するのと同様に、ISP(回線事業者)ごとに分けたネットワークを構築するというアイディアが生まれました。そうすれば、家庭や企業で最低1つ必要になるグローバルIPアドレスを減らすことができますからね。
ただ、このISP内のIPアドレスはプライベートIPアドレスというわけには行きません。プライベートIPアドレスだと、家庭、企業内のIPアドレスと重複してしまう可能性があるからです。そのため、新たに払い出されたIPアドレス帯がこのシェアードIPアドレスです。
具体的には以下のアドレスになります。
100.64.0.0/10
もし家庭用ルータのIPアドレスが上記アドレス帯であれば、これはシェアードIPアドレスでインターネットから直接はアクセスできない、と判断できるわけです。
参考サイト
シェアードアドレス 日経XTECH
2018年10月18日木曜日
プライベートIPアドレスとは
IPアドレス(Internet Protocol Address)というのは、ネットワークに接続をされている機器同士が通信を行うための住所のようなものです。IPアドレスを持たない機器(パソコン、サーバ、ネットワーク機器)は通信を行うことができません。
※これは非常にざっくりとした説明で、OSI参照モデルの第3層だけの話ではあります。
インターネットに接続されている機器が全てIPアドレスを持てばそれはそれで良いのですが、例えば家や会社の中で使うパソコンなどは、インターネットにアクセスすることはあってもインターネットからアクセスされる必要はありません。(逆にセキュリティを考えると、インターネットからパソコンにアクセスできるのは危ないですよね。)また、全てのパソコン等々の機器に一意なIPアドレスを割り振ろうとすると、IPアドレスが足りなくなってしまいます。そんなわけで、閉ざされたネットワークで利用するIPアドレスというのが設定されています。これがプライベートIPアドレスです。
IPv4ではプライベートアドレスとして、以下の3つが用意されています。
・10.0.0.0/8
利用できるアドレス:10.0.0.0~10.255.255.255
・172.16.0.0/12
利用できるアドレス:172.16.0.0~172.31.255.255
・192.168.0.0/16
利用できるアドレス:192.168.0.0~192.168.255.255
これ、結構間違えて使っている環境とかを時々見ます(192.16.1.0/24とかにしちゃったり)。気をつけましょう!
【参考になりそうなサイト】
プライベートネットワーク Wikipedia
IPアドレスとは?をわかりやすく解説します カゴヤのサーバー研究室
※これは非常にざっくりとした説明で、OSI参照モデルの第3層だけの話ではあります。
インターネットに接続されている機器が全てIPアドレスを持てばそれはそれで良いのですが、例えば家や会社の中で使うパソコンなどは、インターネットにアクセスすることはあってもインターネットからアクセスされる必要はありません。(逆にセキュリティを考えると、インターネットからパソコンにアクセスできるのは危ないですよね。)また、全てのパソコン等々の機器に一意なIPアドレスを割り振ろうとすると、IPアドレスが足りなくなってしまいます。そんなわけで、閉ざされたネットワークで利用するIPアドレスというのが設定されています。これがプライベートIPアドレスです。
IPv4ではプライベートアドレスとして、以下の3つが用意されています。
・10.0.0.0/8
利用できるアドレス:10.0.0.0~10.255.255.255
・172.16.0.0/12
利用できるアドレス:172.16.0.0~172.31.255.255
・192.168.0.0/16
利用できるアドレス:192.168.0.0~192.168.255.255
これ、結構間違えて使っている環境とかを時々見ます(192.16.1.0/24とかにしちゃったり)。気をつけましょう!
【参考になりそうなサイト】
プライベートネットワーク Wikipedia
IPアドレスとは?をわかりやすく解説します カゴヤのサーバー研究室
2018年10月17日水曜日
ファイルを1行づつ読み出して処理を行う
phpでファイルを1行づつ最後の行まで読み出す処理です。fopenはどこの行まで読み出すかを指定することも出来るみたいですね。
<?php
/* ファイルポインタをオープン */
$file = fopen("list.txt", "r");
/* ファイルを1行ずつ出力 */
if($file){
while ($line = fgets($file)) {
echo $line;
}
}
/* ファイルポインタをクローズ */
fclose($file);
?>
こちらのサイトを参考にさせて頂きました。
ファイルから1行ずつ読み込む - fgets()
<?php
/* ファイルポインタをオープン */
$file = fopen("list.txt", "r");
/* ファイルを1行ずつ出力 */
if($file){
while ($line = fgets($file)) {
echo $line;
}
}
/* ファイルポインタをクローズ */
fclose($file);
?>
こちらのサイトを参考にさせて頂きました。
ファイルから1行ずつ読み込む - fgets()
2018年10月16日火曜日
2018年10月15日月曜日
Postfix+Gmailの組合せでメール配信環境を構築する
メールを配信できる環境を作るため、Postfixの設定を行いました。本当はPostfix+SendGridの組合せにしようと考えていたのですが、SendGridの審査に多少時間がかかりそうなので、一旦Postfix+Gmailの組合せでメールで飛ばせるようにしておきます。
やり方ですが、以下のサイトを参考にさせて頂きました。
PostfixのメールをGMail経由で送る
上記サイトには記載がないのですが、最近のGoogleアカウントは「安全性の低いアプリの許可」がデフォルト無効になっており、パスワード認証でメールを配信することができません。そのため、本設定を有効にする必要があります。
やり方ですが、以下のサイトを参考にさせて頂きました。
PostfixのメールをGMail経由で送る
上記サイトには記載がないのですが、最近のGoogleアカウントは「安全性の低いアプリの許可」がデフォルト無効になっており、パスワード認証でメールを配信することができません。そのため、本設定を有効にする必要があります。
2018年10月14日日曜日
プルダウンメニューで項目をグループ化する
プルダウンメニューで項目をグループ化するには、以下のようにoptgroup タグを利用します。
<form>
<select>
<optgroup label="英字">
<option value="a">a</option>
<option value="b">b</option>
<optgroup label="数字">
<option value="1">1</option>
<option value="2">2</option>
</optgroup>
</select>
</form>
phpで項目をグループ化する良い方法がないか考えたのですが、一旦保留にします。。。
こちらのサイトを参考にさせて頂きました。
プルダウンメニューをグループ分けする
<form>
<select>
<optgroup label="英字">
<option value="a">a</option>
<option value="b">b</option>
<optgroup label="数字">
<option value="1">1</option>
<option value="2">2</option>
</optgroup>
</select>
</form>
phpで項目をグループ化する良い方法がないか考えたのですが、一旦保留にします。。。
こちらのサイトを参考にさせて頂きました。
プルダウンメニューをグループ分けする
2018年10月13日土曜日
シングルクォート(')を文字列から削除する
すごく悩んだのですが、単純に以下のようにすれば大丈夫でした。
str_replace("'", '',$str)
こちらのサイトを参考にさせて頂きました。
phpで文字列の中に複数ある ' ←(シングルクォート)を削除したいと思いますが、うまく正規表現がかけないので
str_replace("'", '',$str)
こちらのサイトを参考にさせて頂きました。
phpで文字列の中に複数ある ' ←(シングルクォート)を削除したいと思いますが、うまく正規表現がかけないので
2018年10月12日金曜日
文字列を特定の文字で区切って配列に入れる
区切り文字を指定して配列に入れたい場合は、explode関数を使うようです。
こんな感じです。
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
こちらのサイトを参考にさせて頂きました。
explode
こんな感じです。
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
こちらのサイトを参考にさせて頂きました。
explode
2018年10月11日木曜日
文字列を置換する
文字列内の特定の文字を置換するには、strtr関数を利用するそうです。
こんな感じです。
$str = 'This year is 2016 years.';
//部分文字列を検索して置換する
$result = strtr($str, '2016', '2017');
echo $result;
結果
This year is 2017 years.
こちらのサイトを参考にさせて頂きました。
【PHP入門】文字列の置換 | str_replace・str_ireplace・strtr
こんな感じです。
$str = 'This year is 2016 years.';
//部分文字列を検索して置換する
$result = strtr($str, '2016', '2017');
echo $result;
結果
This year is 2017 years.
こちらのサイトを参考にさせて頂きました。
【PHP入門】文字列の置換 | str_replace・str_ireplace・strtr
2018年10月10日水曜日
pre要素で折り返し表示させる
あまり良くないという記述を発見したものの、コマンドの実行結果を表示するのにpre要素を利用しています。現在作成中の機能では1行が長い出力結果が出る場合があるのですが、画面レイアウトが崩れました。。。
調べたところ、CSSで折り返しするように指定できるみたいです。
こんな感じです。
pre {
white-space: pre-wrap ;
}
こちらのサイトを参考にさせて頂きました。
pre要素で折り返し改行させる方法
調べたところ、CSSで折り返しするように指定できるみたいです。
こんな感じです。
pre {
white-space: pre-wrap ;
}
こちらのサイトを参考にさせて頂きました。
pre要素で折り返し改行させる方法
2018年10月9日火曜日
dateで時間を取得するとUTC(協定世界時)になっちゃう問題
phpで結果をログに出す処理でdate関数を使ったところ、時刻がずれていることに気付きました。UTCで出てますね。
で、調べたところphp.iniでタイムゾーンを設定すれば良さそうです。
こんな感じです。
date.timezone = Asia/Tokyo
こちらのサイトを参考にさせて頂きました。
【xampp1.7.4】date関数で時刻を表示させると日本標準時(JST)より8時間遅れる原因
処理の中でも変更できるみたいですね。
今回はまとめて設定したかったのでphp.iniで対応してしまいましたが。
で、調べたところphp.iniでタイムゾーンを設定すれば良さそうです。
こんな感じです。
date.timezone = Asia/Tokyo
こちらのサイトを参考にさせて頂きました。
【xampp1.7.4】date関数で時刻を表示させると日本標準時(JST)より8時間遅れる原因
処理の中でも変更できるみたいですね。
今回はまとめて設定したかったのでphp.iniで対応してしまいましたが。
2018年10月8日月曜日
PHPでコマンドを呼び出す際に入力値をエスケープする
サニタイジングというと色々ややこしい話になりそうですが、やはり外部からの入力値に危ない文字列が含まれるリスクは考慮しておく必要があります。例えば入力値を変数としてコマンドを実行する場合、以下のような複数の対策を取る必要があります。
PHPの場合は以下の関数を利用するようです。
escapeshellarg()
更に、万が一のことを考え、実行させるユーザの権限を最小限のものにしておく必要があります。
まあ、そもそもPHPからコマンドを呼び出すような実装をするなと言う話はありますが、自分が作りたいものにコマンド実行ありきのものが多いのです。でも、今後SQLとかを実行する際にも役立つと思うので、勉強がてら慎重に作っていこうと思います。
こちらのサイトを参考にさせて頂きました。
サニタイズ/入力値検証/エスケープの考え方
- 入力値チェック
- エスケープ
- コマンド実行ユーザ権限を必要最低限のものとする
PHPの場合は以下の関数を利用するようです。
escapeshellarg()
更に、万が一のことを考え、実行させるユーザの権限を最小限のものにしておく必要があります。
まあ、そもそもPHPからコマンドを呼び出すような実装をするなと言う話はありますが、自分が作りたいものにコマンド実行ありきのものが多いのです。でも、今後SQLとかを実行する際にも役立つと思うので、勉強がてら慎重に作っていこうと思います。
こちらのサイトを参考にさせて頂きました。
サニタイズ/入力値検証/エスケープの考え方
2018年10月7日日曜日
名前解決確認
名前解決のテストを行う機能を作成しました。こちらになります。
名前解決確認(nslookup/dig)
このページで名前解決確認を行うと、nslookupとdigの両方を実行してくれます。digの方が実際のDNSレコードのイメージで出力されるので見やすいと思うのですが、自分も含めて名前解決と言えばnslookupだよね、と考えている人も多いかと思い、両方出力するようにしました。
オプションはレコードと利用するDNSサーバだけにしています。コマンド自体は色々なオプションが用意はされているのですが、画面にオプションを増やすと分かりにくくなってしまうかと思い、今回はシンプルにしてみました。再帰しないとか、debugとかはニーズもあるかとは考えたのですが、一旦保留です。
nslookupとdigの出力結果の解説も作ろうかとは思ったのですが、まあ少し調べると色々出てきますし、そもそも名前解決を確認しようとする人はそのくらい分かるかなということで、今回は作成してません。一応、参考になりそうなサイトをご紹介しておきます。
nslookupの基本的な使い方(イントラネット編)
奥が深いDNSサーバーとdigコマンド
名前解決確認(nslookup/dig)
このページで名前解決確認を行うと、nslookupとdigの両方を実行してくれます。digの方が実際のDNSレコードのイメージで出力されるので見やすいと思うのですが、自分も含めて名前解決と言えばnslookupだよね、と考えている人も多いかと思い、両方出力するようにしました。
オプションはレコードと利用するDNSサーバだけにしています。コマンド自体は色々なオプションが用意はされているのですが、画面にオプションを増やすと分かりにくくなってしまうかと思い、今回はシンプルにしてみました。再帰しないとか、debugとかはニーズもあるかとは考えたのですが、一旦保留です。
nslookupとdigの出力結果の解説も作ろうかとは思ったのですが、まあ少し調べると色々出てきますし、そもそも名前解決を確認しようとする人はそのくらい分かるかなということで、今回は作成してません。一応、参考になりそうなサイトをご紹介しておきます。
nslookupの基本的な使い方(イントラネット編)
奥が深いDNSサーバーとdigコマンド
2018年10月6日土曜日
DNSレコードとは
DNS(Domain Name System)はホスト名や役割などをIPアドレスと紐付けて管理する、インターネットの重要な仕組みの1つです。この紐付けが具体的に記載されているものがDNSレコードです。DNSレコードはいくつも種類がありますが、ここでは主要なものを紹介します。
TXTレコードは色々な使い方をしますし、上記以外にもSRVレコードやCAAレコードなども時々登場します。奥深い世界ですね。
以下、参考リンクです。
DNSレコードタイプの一覧 Wikipedia
主なDNSレコードの種類 @IT
Aレコード | ホストのIPアドレス(ipv4) |
AAAAレコード | ホストのIPアドレス(ipv6) |
PTRレコード | IPアドレスに対するホスト名、つまりAレコードの逆 |
CNAMEレコード | ホスト名のエイリアス(別名) |
TXTレコード | ホストへのテキスト情報 |
NSレコード | ドメインのDNSサーバ |
MXレコード | ドメインのメールサーバ |
SOAレコード | ドメインの情報 |
TXTレコードは色々な使い方をしますし、上記以外にもSRVレコードやCAAレコードなども時々登場します。奥深い世界ですね。
以下、参考リンクです。
DNSレコードタイプの一覧 Wikipedia
主なDNSレコードの種類 @IT
2018年10月5日金曜日
2018年10月4日木曜日
ファイルに追記する
PHPで処理を行うたびにログに記録するようにしたいと思い、ログファイルに追記する処理を探しました。いくつかやり方はあるようですが、こちらを採用しました。
<?php
// 書き込みモード(追記)でファイルを開く
$fp = fopen("fwrite.txt", "a");
// ファイルに書き込む
fwrite($fp, "add sample");
// ファイルを閉じる
fclose($fp);
?>
こちらのサイトを参考にさせて頂きました。
fopen関数から始める!ファイルの読み込み・書き込み方法【PHP入門】
<?php
// 書き込みモード(追記)でファイルを開く
$fp = fopen("fwrite.txt", "a");
// ファイルに書き込む
fwrite($fp, "add sample");
// ファイルを閉じる
fclose($fp);
?>
こちらのサイトを参考にさせて頂きました。
fopen関数から始める!ファイルの読み込み・書き込み方法【PHP入門】
2018年10月3日水曜日
文字列を検索する
特定の文字列が含まれているか、で条件分岐をしたい場合、以下のようにすれば良い。
if(strpos($subject,'bc') !== false){
//'abcd'のなかに'bc'が含まれている場合
}
if(strpos($subject,'bc') === false){
//'abcd'のなかに'bc'が含まれていない場合
}
preg_matchで正規表現を指定するよりも、処理が早いそうです。
こちらのサイトを参考にさせて頂きました。
【PHP】特定の文字列を含むかのチェック
if(strpos($subject,'bc') !== false){
//'abcd'のなかに'bc'が含まれている場合
}
if(strpos($subject,'bc') === false){
//'abcd'のなかに'bc'が含まれていない場合
}
preg_matchで正規表現を指定するよりも、処理が早いそうです。
こちらのサイトを参考にさせて頂きました。
【PHP】特定の文字列を含むかのチェック
2018年10月2日火曜日
FQDN、IPアドレスを正規表現で記載する
FQDNについては、こんな感じでできるようです。
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-\.]{0,61}[a-zA-Z0-9])+\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])*$
こちらのサイトを参考にさせて頂きました。
[regex] DNSホスト名またはIPアドレスに一致する正規表現ですか?
IPアドレスについては、こんな感じでできるようです。
^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
こちらのサイトを参考にさせて頂きました。
IPアドレスの正規表現について
(2019/07/17追記)
FQDNの正規表現を修正しました。まだ怪しい感じですが、多少改善されたかと。
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-\.]{0,61}[a-zA-Z0-9])+\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])*$
こちらのサイトを参考にさせて頂きました。
[regex] DNSホスト名またはIPアドレスに一致する正規表現ですか?
IPアドレスについては、こんな感じでできるようです。
^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
こちらのサイトを参考にさせて頂きました。
IPアドレスの正規表現について
(2019/07/17追記)
FQDNの正規表現を修正しました。まだ怪しい感じですが、多少改善されたかと。
2018年10月1日月曜日
pingコマンド、実行結果の見方について
本記事ではPing疎通テストの解説を行います。
1.Pingとは
pingとはPacket INternet Groperの略で、対向のサーバ、ネットワークと通信できるかを確認するコマンドです。pingはICMP(Internet Control Message Protocol)というIP層のプロトコルを利用します。
2.pingコマンド
pingコマンドはWindowsにもLinuxにも用意されています。基本的な使い方は同じですが、オプションが異なります。Suama Online Serviceの環境はLinux(CentOS)で動作していますので、Linux用のオプションを指定して実行しています。
実行するコマンドは以下のとおりです。
ping -c5 [対象ホスト]
-c5:これは実行する回数を5回に指定しています。
※Windowsはオプション無しだと4回しか実行しませんが、LinuxはCtl+Cで止めるまで無限に実行し続けます。
これ以外にも幾つかオプションが用意されています。詳細は以下のサイトをご参照下さい。
【Linux】pingコマンドの使い方
3.実行結果の見方について
次のコマンドを実行した場合、
ping -c5 www.example.com
次のような実行結果が返ります。
--------
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=53 time=107 ms
--- www.example.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 107.564/107.602/107.660/0.416 ms
--------
1行目は疎通確認対象情報です。IPアドレスの場合はアドレスのみ記載されますが、FQDNで指定した場合、名前解決の結果が表示されます。
2行目からが実行結果で、64 bytesはテストに利用したパケットデータサイズ、fromは疎通テスト先、icmp_seqは何番目のパケットか、となっています。ttlはネットワークパケットのTTL(Time To Live)で、最初は64でネットワーク機器を経由するたびに1減ります。そのため、ttlを確認するとそのパケットがどれだけのネットワーク機器を経由したかが分かります。ttlが0になるとそのパケットは転送されなくなります。timeは応答時間で、少ないほど遅延の少ない通信が行えていることが分かります。
ping statisticsはpingコマンド実行結果のサマリです。結果の1行目は結果サマリで、2行目が分析結果となっています。
2行目にはmin(最速)、max(最遅値)、ave(平均値)、mdev(偏差)が表示されます。偏差で通信の安定性を判断することができます。が、今回の場合はサンプルが少ないので、あまり参考にはなりませんね。
以下のサイトを参考にさせて頂きました。
pingコマンドについて詳しくまとめました 【Linuxコマンド集】
1.Pingとは
pingとはPacket INternet Groperの略で、対向のサーバ、ネットワークと通信できるかを確認するコマンドです。pingはICMP(Internet Control Message Protocol)というIP層のプロトコルを利用します。
2.pingコマンド
pingコマンドはWindowsにもLinuxにも用意されています。基本的な使い方は同じですが、オプションが異なります。Suama Online Serviceの環境はLinux(CentOS)で動作していますので、Linux用のオプションを指定して実行しています。
実行するコマンドは以下のとおりです。
ping -c5 [対象ホスト]
-c5:これは実行する回数を5回に指定しています。
※Windowsはオプション無しだと4回しか実行しませんが、LinuxはCtl+Cで止めるまで無限に実行し続けます。
これ以外にも幾つかオプションが用意されています。詳細は以下のサイトをご参照下さい。
【Linux】pingコマンドの使い方
3.実行結果の見方について
次のコマンドを実行した場合、
ping -c5 www.example.com
次のような実行結果が返ります。
--------
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=53 time=107 ms
--- www.example.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 107.564/107.602/107.660/0.416 ms
--------
1行目は疎通確認対象情報です。IPアドレスの場合はアドレスのみ記載されますが、FQDNで指定した場合、名前解決の結果が表示されます。
2行目からが実行結果で、64 bytesはテストに利用したパケットデータサイズ、fromは疎通テスト先、icmp_seqは何番目のパケットか、となっています。ttlはネットワークパケットのTTL(Time To Live)で、最初は64でネットワーク機器を経由するたびに1減ります。そのため、ttlを確認するとそのパケットがどれだけのネットワーク機器を経由したかが分かります。ttlが0になるとそのパケットは転送されなくなります。timeは応答時間で、少ないほど遅延の少ない通信が行えていることが分かります。
ping statisticsはpingコマンド実行結果のサマリです。結果の1行目は結果サマリで、2行目が分析結果となっています。
2行目にはmin(最速)、max(最遅値)、ave(平均値)、mdev(偏差)が表示されます。偏差で通信の安定性を判断することができます。が、今回の場合はサンプルが少ないので、あまり参考にはなりませんね。
以下のサイトを参考にさせて頂きました。
pingコマンドについて詳しくまとめました 【Linuxコマンド集】
ローカルアドレス(プライベートアドレス)を正規表現で記載する
まあ、こういうことですよね。
(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
こちらのサイトを参考にさせて頂きました。
プライベートIPアドレスとその正規表現
正規表現のチェックはこちらのサイトが便利です!
PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1
こちらのサイトで確認する際はこんな風↓にデリミタ(区切り文字)を付ける必要がります。
/(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/u
(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
こちらのサイトを参考にさせて頂きました。
プライベートIPアドレスとその正規表現
正規表現のチェックはこちらのサイトが便利です!
PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1
こちらのサイトで確認する際はこんな風↓にデリミタ(区切り文字)を付ける必要がります。
/(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/u
登録:
投稿 (Atom)