[Copilot先生に聞いてみた!] PHPで 国内IPと国内プロバイダを判定する方法は?
カテゴリー: Copilot先生に聞いてみた
2024-08-07
タイトル
Copilot先生(新生BING先生)に聞いてみた!!
執筆:2024.08.07
編集:2024.08.07
編集:2024.08.07
Copilot先生(新生BING先生)に聞いてみた!!
- IPv6アドレスが国内のIPかどうかを判定する方法
- 国内プロバイダかどうかを判定する方法
国内のIPv6プレフィックスをチェックする方法
<?php
function isDomesticProvider($ip) {
// WHOISサーバーに接続して情報を取得
$whois_server = 'whois.nic.ad.jp';
$port = 43;
$timeout = 10;
$sock = fsockopen($whois_server, $port, $errno, $errstr, $timeout);
if (!$sock) {
return false;
}
fwrite($sock, $ip . "\r\n");
$response = '';
while (!feof($sock)) {
$response .= fgets($sock, 128);
}
fclose($sock);
// WHOIS情報に国内プロバイダのキーワードが含まれているかをチェック
$domestic_keywords = ['Japan', 'JP', 'JPN', '日本'];
foreach ($domestic_keywords as $keyword) {
if (strpos($response, $keyword) !== false) {
return true;
}
}
return false;
}
// 使用例
$ip = '2404:6800:400a:0800:0000:0000:0000:2004';
if (isDomesticProvider($ip)) {
echo "このIPアドレスは国内プロバイダのものです。";
} else {
echo "このIPアドレスは国内プロバイダのものではありません。";
}
?>
国内プロバイダかどうかを判定する方法
<?php
function isDomesticProvider($ip) {
// WHOISサーバーに接続して情報を取得
$whois_server = 'whois.nic.ad.jp';
$port = 43;
$timeout = 10;
$sock = fsockopen($whois_server, $port, $errno, $errstr, $timeout);
if (!$sock) {
return false;
}
fwrite($sock, $ip . "\r\n");
$response = '';
while (!feof($sock)) {
$response .= fgets($sock, 128);
}
fclose($sock);
// WHOIS情報に国内プロバイダのキーワードが含まれているかをチェック
$domestic_keywords = ['Japan', 'JP', 'JPN', '日本'];
foreach ($domestic_keywords as $keyword) {
if (strpos($response, $keyword) !== false) {
return true;
}
}
return false;
}
// 使用例
$ip = '2404:6800:400a:0800:0000:0000:0000:2004';
if (isDomesticProvider($ip)) {
echo "このIPアドレスは国内プロバイダのものです。";
} else {
echo "このIPアドレスは国内プロバイダのものではありません。";
}
?>
メモ:
[ JPNIC database provides information regarding IP address and ASN. Its use ]
[ is restricted to network administration purposes. For further information, ]
[ use 'whois -h whois.nic.ad.jp help'. To only display English output, ]
[ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]
・使えそうな情報を抜粋
Network Information: [ネットワーク情報]
[IPネットワークアドレス]
[組織名]
[Organization]
[割振年月日]
[最終更新]
[ is restricted to network administration purposes. For further information, ]
[ use 'whois -h whois.nic.ad.jp help'. To only display English output, ]
[ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]
・使えそうな情報を抜粋
Network Information: [ネットワーク情報]
[IPネットワークアドレス]
[組織名]
[Organization]
[割振年月日]
[最終更新]
ネットワーク範囲がわかるので、結果を保存して範囲を検索するように改良すると、同じ範囲内からの問い合わせをしないで済みます。
便利Tips:
最近考案したのですが、この問いは大変便利です!! コピペするといいですよ。
2つの回答をまとめてください。
また同じ回答が得られるようにあなたへの質問内容も教えてください。
また同じ回答が得られるようにあなたへの質問内容も教えてください。
回答
質問内容
- IPv6アドレスが国内のIPであるかを判定する方法をPHPで教えてください。
- 国内プロバイダかどうかを判定する方法をPHPで教えてください。