linux系统dig和nslookup的安装1+

41,861 views / 2010.01.28 / 1:01 下午

nslookup是常用来查询本机域名解析情况的命令,但是一些linux系统下默认无此命令。我们可以通过安装一个包来使该命令生效,这个包中也包括dig命令。

Ubuntu:

# sudo apt-get install dnsutils

Debian:

# apt-get update
# apt-get install dnsutils

Fedora / Centos:

# yum install bind-utils
Categories: 分享 Tags: , ,

一个抓取网站内容的函数,支持301 302跳转0+

6,965 views / 2010.01.18 / 4:04 下午

我们在抓取网站内容的时候,经常遇到稀奇古怪的防盗链,比如上次碰到一个站的图片地址是假的,访问后要301跳转一次才到真正的图片路径,这个真实的路径又做了防盗措施,判断referer是不是上个假的图片地址。用curl试了几次,终于整出一个函数,效果不错。

$curl_loops = 0;//避免死了循环必备
$curl_max_loops = 3;
 
function curl_get_file_contents($url, $referer='') {
global $curl_loops, $curl_max_loops;
$useragent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
if ($curl_loops++ >= $curl_max_loops) {
  $curl_loops = 0;
  return false;
} 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);?curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$data = curl_exec($ch);
$ret = $data;
list($header, $data) = explode("\r\n\r\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
if ($http_code == 301 || $http_code == 302) {
  $matches = array();
  preg_match('/Location:(.*?)\n/', $header, $matches);
  $url = @parse_url(trim(array_pop($matches)));
  if (!$url) {
  ?$curl_loops = 0;
  ?return $data;
  } 
  $new_url = $url['scheme'] . '://' . $url['host'] . $url['path']
   . (isset($url['query']) ? '?' . $url['query'] : '');
  $new_url = stripslashes($new_url);
  return curl_get_file_contents($new_url, $last_url);
} else {
  $curl_loops = 0;
  list($header, $data) = explode("\r\n\r\n", $ret, 2);
  return $data;
} 
}
Categories: 感悟 Tags: , ,

ubuntu server 9.04 架设vpn 服务 手记2+

8,752 views / 2010.01.12 / 10:10 下午

刚在国外买了台服务器,第一个念头就是终于可是翻墙了,于是着手建立一个vpn服务器。OpenVPN在windows上还要客户端,不采用。L2TP/IPSec方式的太复杂,也不用。所以就选择PPTP方式,因为现在windows和Mac系统中都内建了相应的客户端。下面是我的安装日记。
服务器环境:Ubuntu 9.04 单网卡
呵呵,先sudo bash吧,虽然不安全,可是谨慎些,运行命令方便
首先安装pptp server
apt-get install pptpd
成功后配置conf文件
vi /etc/pptpd.conf
释放文件末端的 localip 和 remoteip 两个参数的注释,然后修改。这里,localip 是 VPN 链接成功后服务器的 ip 地址, remoteip 则客户端的可分配 ip 地址范围。下面是我的配置:
# (Recommended)
localip 10.100.0.1
remoteip 10.100.0.2-10
# or
#localip 192.168.0.234-238,192.168.0.245
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245
然后要编辑/etc/ppp/pptpd-options文件,为vpn指定dsn服务器, 哈哈,我们使用Google Public DNS:
vi /etc/ppp/pptpd-options
修改
ms-dns 8.8.8.8
ms-dns 8.8.4.4

保存后,接下来配置用户名和密码了。修改/etc/ppp/chap-secrets文件,根据你的情况填写即可。具体解释如下:
第一列是用户名,第二列是服务器名(默认写pptpd 即可,注意与 pptpd-options 文件保持一致),第三列是密码,第四列是 IP 限制(不做限制用 * )。

最后重启pptpd服务,就可以生效了。

目前位置,我们只完成了一部分,因为这样只能访问服务器资源,其余内外网内容都无法访问。我们继续操作:
修改/etc/sysctl.conf,把ipv4 forward开启,方法是去掉
net.ipv4.ip_forward=1前面的注释,然后保存,运行sysctl –p.

root@duyipeng:~# sysctl -p
net.ipv4.ip_forward = 1
这样,我们的vpn server就算是搭建成功了。
如果依然不能访问外网,请使用iptables建立一个NAT, 方法如下:
apt-get intall iptables
iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
上面的24表示子网掩码,代表24个1.

如果要防止重启服务器后iptables丢失,先运行

iptables-save > /etc/iptables-rules

然后修改/etc/network/interfaces 文件,在eth0 下面加入

pre-up iptables-restore < /etc/iptables-rules

这样,服务器重启后,就能自动挂载规则了。

如此,应该可以解决问题。如果还是无法成功,你就改检查你的路由和防火墙了。Good Luck!

Categories: 感悟 Tags: , ,