㈠ 如何解決國內訪問通用頂級根域名伺服器出現異常
國內訪問通用頂級根域名伺服器出現異常,部分國內用戶無法訪問.com等域名網站。
二?一四年一月二十一日故障發生後,所有通用頂級域名在國內的訪問出現問題。部分用戶在訪問網站時,會被跳轉到65.49.2.178這一IP地址,導致真正的網站無法順利訪問。查詢65.49.2.178的信息,發現該IP位於美國北卡羅萊納州卡里鎮Dynamic Internet Technology公司,大量中國知名IT公司的域名被解析到該地址。
給大家解釋一下幾個專業名詞:
通用頂級根域名:供一些特定組織使用的頂級域,以其代表組織英文名稱的頭幾個英文字母代表,通用頂級域名包括以.com(商業機構)、.net(從事互聯網服務的機構)、.org(非贏利性組織)結尾的常用域名,還包括以.name(適用於個人注冊)、.aero(適用於航空運輸業)為結尾的新通用頂級根域名。
根域名伺服器:簡稱「根伺服器」,主要用來管理互聯網的主目錄,全世界只有13台根伺服器,名字分別為「A」至「M」,1個為主根伺服器,放置在美國。其餘12個均為輔根伺服器,其中9台設置在美國,另外的三台設置於英國、瑞典和日本。所有根伺服器均由美國政府授權的互聯網域名與號碼分配機構ICANN統一管理,負責全球互聯網域名根伺服器、域名體系和IP地址等的管理。
DNS:DNS 是域名系統 (Domain Name System) 的縮寫,是網際網路的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式資料庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。人們習慣記憶域名,但機器間互相只認IP地址,域名與IP地址之間是一一對應的,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析伺服器來完成,整個過程是自動進行的。輸入IP地址是直接從主機上調用內容,輸入域名是通過域名解析伺服器指向對應的主機的IP地址,再從主機調用網站的內容。如果DNS出現故障,就會立刻不能上網。
先通俗地還原一下我們訪問網站的流程:
舉例來說,訪問XXX.com域名的網站,要經過三個步驟:
1、訪問XXX.com域名網站的請求先要指向根伺服器;
2、根伺服器再將這個請求指向.com伺服器;
3、.com伺服器再把這個請求指向XXX.com。
國內曾經兩次發生過根域名故障,一次是2013年07月06日,上海聯通DNS設備發生故障,導致2G、3G的手機用戶無法上網。另一次是2013年08月25日,.CN根域名伺服器全線故障。時隔5個月,國內又再次發生DNS故障。
至於這次故障發生的原因,提出了以下幾個可能:
1、如果這次的問題僅出現在中國,就說明全球根伺服器並未出現問題,問題可能出在國內網路服務商身上。
2、很多網站被解析到65.49.2.178,由於國內沒有根伺服器,所以可能是國內與國外的伺服器介面節點發生故障。有專家分析,故障原因可能是人為的黑客攻擊。
遇到這種狀況應該如何解決?
從普通用戶的層面講,網民也可以通過自行修改DNS伺服器地址為114.114.114.114或8.8.8.8來解決。
具體操作步驟如下:
1.查看本地連接屬性;
2.修改當前網路連接的TCP/IP V4屬性;
3.將DNS伺服器地址修改為114.114.114.114。
㈡ php代碼 訪問者IP是中國的就跳轉到中文頁面,不是中國的就跳轉到英文頁面
可能原來伺服器有讀取ip所在地的介面吧,可能你那個判斷不好用了
放到index.php中
<?php
include_once 'class_iplocation.php';
$ip='222.132.78.170';
$iplo= new IpLocation();
$a_provinces=Array (
'0' => '河北',
'1' =>'海南',
'2' => '貴州',
'3' => '廣西',
'4' => '廣東',
'5' => '甘肅',
'6' => '福建',
'7' => '北京',
'8' => '安徽',
'9' => '河南',
'10' => '黑龍江',
'11' => '湖北',
'12' => '湖南',
'13' => '吉林',
'14' => '江蘇',
'15' => '江西',
'16' => '遼寧',
'17' => '內蒙古',
'18' => '寧夏',
'19' => '青海',
'20' => '山東',
'21' => '山西',
'22' => '陝西',
'23' => '上海',
'24' => '四川',
'25' => '天津',
'26' => '西藏',
'27' => '新疆',
'28' => '雲南',
'29' => '浙江',
'30' => '重慶',
'31' => '香港',
'32' => '澳門',
'33' => '台灣'
);
$china='';
$strs=$iplo->getlocation($ip);
//print_r($strs);
//echo $strs['country'];
foreach ($a_provinces as $ci)
{
$pos = strpos($strs['country'],$ci);
if ($pos !== false ) {
echo $ci;
$china=$ci;
break;
}
}
echo $china;
if($china!='')
$home='chinese/index.php';
else
$home='english/index.php';
echo "<script language='javascript'>window.location.href='".$home."';</script>";
?>
說明:1.qqwry.dat在qq文件夾下搜就有哦。這三個文件應該放於同一目錄
2.類文件:class_iplocation.php
<?php
/**
* IP 地理位置查詢類
*
* @author 馬秉堯
* @version 1.5
* @right 2005 CoolCode.CN
*/
class IpLocation {
/**
* QQWry.Dat文件指針
*
* @var resource
*/
var $fp;
/**
* 第一條IP記錄的偏移地址
*
* @var int
*/
var $firstip;
/**
* 最後一條IP記錄的偏移地址
*
* @var int
*/
var $lastip;
/**
* IP記錄的總條數(不包含版本信息記錄)
*
* @var int
*/
var $totalip;
/**
* 返回讀取的長整型數
*
* @access private
* @return int
*/
function getlong() {
//將讀取的little-endian編碼的4個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}
/**
* 返回讀取的3個位元組的長整型數
*
* @access private
* @return int
*/
function getlong3() {
//將讀取的little-endian編碼的3個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}
/**
* 返回壓縮後可進行比較的IP地址
*
* @access private
* @param string $ip
* @return string
*/
function packip($ip) {
// 將IP地址轉化為長整型數,如果在PHP5中,IP地址錯誤,則返回False,
// 這時intval將Flase轉化為整數-1,之後壓縮成big-endian編碼的字元串
return pack('N', intval(ip2long($ip)));
}
/**
* 返回讀取的字元串
*
* @access private
* @param string $data
* @return string
*/
function getstring($data = "") {
$char = fread($this->fp, 1);
while (ord($char) > 0) { // 字元串按照C格式保存,以\0結束
$data .= $char; // 將讀取的字元連接到給定字元串之後
$char = fread($this->fp, 1);
}
return $data;
}
/**
* 返回地區信息
*
* @access private
* @return string
*/
function getarea() {
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 0: // 沒有區域信息
$area = "";
break;
case 1:
case 2: // 標志位元組為1或2,表示區域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default: // 否則,表示區域信息沒有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}
/**
* 根據所給 IP 地址或域名返回所在地區信息
*
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip) {
if (!$this->fp) return null; // 如果數據文件沒有被正確打開,則直接返回空
$location['ip'] = gethostbyname($ip); // 將輸入的域名轉化為IP地址
$ip = $this->packip($location['ip']); // 將輸入的IP地址轉化為可比較的IP地址
// 不合法的IP地址會被轉化為255.255.255.255
// 對分搜索
$l = 0; // 搜索的下邊界
$u = $this->totalip; // 搜索的上邊界
$findip = $this->lastip; // 如果沒有找到就返回最後一條IP記錄(QQWry.Dat的版本信息)
while ($l <= $u) { // 當上邊界小於下邊界時,查找失敗
$i = floor(($l + $u) / 2); // 計算近似中間記錄
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4)); // 獲取中間記錄的開始IP地址
// strrev函數在這里的作用是將little-endian的壓縮IP地址轉化為big-endian的格式
// 以便用於比較,後面相同。
if ($ip < $beginip) { // 用戶的IP小於中間記錄的開始IP地址時
$u = $i - 1; // 將搜索的上邊界修改為中間記錄減一
}
else {
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 獲取中間記錄的結束IP地址
if ($ip > $endip) { // 用戶的IP大於中間記錄的結束IP地址時
$l = $i + 1; // 將搜索的下邊界修改為中間記錄加一
}
else { // 用戶的IP在中間記錄的IP范圍內時
$findip = $this->firstip + $i * 7;
break; // 則表示找到結果,退出循環
}
}
}
//獲取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用戶IP所在范圍的開始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong()); // 用戶IP所在范圍的結束地址
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 1: // 標志位元組為1,表示國家和區域信息都被同時重定向
$countryOffset = $this->getlong3(); // 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 2: // 標志位元組為2,表示國家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2: // 標志位元組為2,表示國家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET") { // CZ88.NET表示沒有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET") {
$location['area'] = "";
}
return $location;
}
/**
* 構造函數,打開 QQWry.Dat 文件並初始化類中的信息
*
* @param string $filename
* @return IpLocation
*/
function IpLocation($filename = "QQWry.Dat") {
$this->fp = 0;
if (($this->fp = @fopen($filename, 'rb')) !== false) {
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;
//注冊析構函數,使其在程序執行結束時執行
register_shutdown_function(array(&$this, '_IpLocation'));
}
}
/**
* 析構函數,用於在頁面執行結束後自動關閉打開的文件。
*
*/
function _IpLocation() {
if ($this->fp) {
fclose($this->fp);
}
$this->fp = 0;
}
}
?>
㈢ 訪問某些網頁被惡意跳轉了怎麼辦,有沒有什麼風險
這個是沒有辦法避免的。
國外正在開發最新的純凈版的瀏覽器,但國內下載不下來。
網吧的系統每次重啟都基本等於重做系統的概念,不用擔心中毒。
但是你的賬號密碼在登錄的時候要注意不要保存密碼,網頁會有提示。
可以使用 電腦自帶的軟鍵盤完成 輸入賬號密碼操作。避免被盜號。
㈣ 區域網內網用戶訪問做跳轉
架設dns伺服器,在dns伺服器內設定好。
然後要求內網用用戶用內網的dns呀。
不然就在路由那做手腳了。和電信一樣。訪問外網的時候第一次都轉到自己的內網伺服器。不過你的路由要有這個功能才行。