工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2010年10月的文章

《关于linux下tc限速的代码》的说明(转)

首先说明下,在写脚本时,记得要用vi写,其它的文本编辑器不要用,因为会出来许多不知名的字符。

个人认为在vi中输入(:set nu)显示行号,更加适合编辑。

如果eth1网卡上用来上外网,eth2是用来作内网共享上网。tc只能控制发送的数据量所以要写下载的话,只能写在eth2网卡上。

一,先记得清空eth2旧有队列,再作根队列进行绑定这个网卡

tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 2: htb default 20

注:这里有一个默认就是选择2:20

二,作根类

tc class add dev eth2 parent 2:0 classid 2:1 htb rate 100kbit

这里也作了根类的限速,所以共享所能拥有的网速100k。这里的k可不是我们平时用的k,100kbit大概只能提供12k的下载速度,也就是如同我们拉了一根10M的光纤,实际下载的速度只有1.2M。这个关系也就是除个8这样。

注:htb是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。HTB可以通过TBF(Token Bucket Filter)令牌桶过滤器实现带宽限制,也能够划分类别的优先级。

三,作子类

tc class add dev eth2 parent 2:1 classid 2:50 htb rate 50kbit ceil 50kbit
tc class add dev eth2 parent 2:1 classid 2:100 htb rate 100kbit ceil 100kbit
tc class add dev eth2 parent 2:1 classid 2:20 htb rate 20kbit ceil 20kbit

这三个子类,都进行了限速而且不能借速,如果rate 128kbit ceil 384kbit 速率是128kbit,最高是384kbit,也就是它能借用(384-128)kbit ,但是这里有一点ceil的值最高可不能大于根类的大小。

四,作队列

tc qdisc add dev eth2 parent 2:50 handle 50: sfq perturb 10

tc qdisc add dev eth2 parent 2:100 handle 100: sfq perturb 10

tc qdisc add dev eth2 parent 2:20 handle 20: sfq perturb 10

这里的sfq perturb 10还可能是以下的几种形式:

第一种:[p|b]fifo先进先出只有一个参数:limit. pfifo是以数据包的个数为单位;bfifo是以字节数为单位。如:pfifo limit 2

第二种:red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。

第三种:sfq是Stochastic Fairness Queueing(随机公平队列)的简写。是公平队列算法家族中的一个简单实现.它的精确性不如其它的方法,但是它在实现高度公平的同时,需要的计算量却很少。只有当你的出口网卡确实已经挤满了的时候,SFQ才会起作用,SFQ会频繁地改变散列算法,这也是公平的一个方面。sfq的perturb参数指多少秒后重新配置一次散列算法.如果取消设置,散列算法将永远不会重新配置(不建议这样做).10秒应该是一个合适的值:如tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10

第四种:tbf是Token Bucket Filter(令牌桶过滤器)的简写,适合于把流速降低到某个值。这个参数参考tc命令及参数

五,过滤器

tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.50/32 flowid 2:50
tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.100/32 flowid 2:100
tc filter add dev eth2 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:20

这里用u32的过滤器

还有一种是fw形式的过滤器,fw的写法
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11

另个还得在iptables 作fw标志。

一般出外网时才会用fw规则,因为内部IP地址在经过外网卡时会进行NAT,所以不能用源地址进行U32匹配,只能是FW规则进行流量标识。

iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.200/32 -j MARK --set-mark 1

iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.172/32 -j MARK --set-mark 1

iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.82/32 -j MARK --set-mark 1

tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 1 fw classid 1:20

iptables mark后的值也就是tc fw前的值

但是prio优先级一定不能相同,否则fw规则将失效

因为我没有做上传限速,所以没有用到fw.

这里有没有看到ip的形式是192.168.1.82/32 和192.168.1.0/24。前者表示192.168.1.82这样一个ip,后者却是表示192.168.1这样的一个整个c段的网络地址。

这里的ip不能写成192.168.1.25-82(想表示的意思是从192.168.1.25到192.168.1.82这里的所有ip)。我用了很多的方法,都做不到。如果要这样做的话,我只能用shell里做一个循环。

IPS=2#起始
IPE=253#结束

COUNTER=$IPS
while [ $COUNTER -le $IPE ]

do
语句 $COUNTER
COUNTER=` expr $COUNTER + 1 `
done

还有规则是提到的ip的电脑一起共用所设带宽

配置vsftp支持ssl

ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题
 
SSL(Secure Socket Layer)工作于传输层和应用程序之间.作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证.SSL取得大规模成功后,IETFSSL作了标准化,并将其称为TLS(Transport Layer Security).Ftp结合SSL,将实现传输数据的加密,保证数据不被别人窃取
 
 
让vsftpd支持SSL,必须让OPENSSL≥0.9.6版本,还有就是本身vsftpd版本是否支持
查询vsftpd软件是否支持SSL
[root@localhost vsftpd]# ldd /usr/sbin/vsftpd |grep libssl
        libssl.so.6 => /lib/libssl.so.6 (0xf7f27000)   ==è说明此版本支持
如没有输出libssl.so.6 => /lib/libssl.so.6 (0xf7f27000)类似文本,说明此vsftpd版本不支持SSL


openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem  ==è生成vsftpd.pem 证书

vi /etc/vsftpd/vsftpd.conf  ==è编辑主配置文件,添加以下参数ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
service vsftpd restart

下面是ssl参数一些定义,根据自己需求去修改
ssl_enable=yes/no             //是否启用 SSL,默认为no
allow_anon_ssl=yes/no         //是否允许匿名用户使用SSL,默认为no
rsa_cert_file=/path/to/file       //rsa证书的位置
dsa_cert_file=/path/to/file      //dsa证书的位置
force_local_logins_ssl=yes/no    //非匿名用户登陆时是否加密,默认为yes
force_local_data_ssl=yes/no     //非匿名用户传输数据时是否加密,默认为yes
force_anon_logins_ssl=yes/no    //匿名用户登录时是否加密,默认为no
force_anon_data_ssl=yes/no     //匿名用户数据传输时是否加密,默认为no
ssl_sslv2=yes/no               //是否激活sslv2加密,默认no
ssl_sslv3=yes/no                //是否激活sslv3加密,默认no
ssl_tlsv1=yes/no                //是否激活tls v1加密,默认yes
ssl_ciphers=加密方法            //默认是DES-CBC3-SHA

 

php页面跳转的三种方法详解

1.第一种:
 <?php
header("Location: htto://www.wdlinux.cn");
?>
2.第二种:
和javascrīpt结合起来
  echo   "<script   language=javascript>"; 
  echo "location.href='www.wdlinux.cn';";
  echo   "</script>";
3.第三种:
echo("<meta http-equiv='refresh'content=0;URL='http://www.wdlinux.cn'>"); 

session_register()出错的解决办法

session_register()出错的解决办法
错误提示:warning: unknown(): your script possibly relies on a session side-effect which
existed until php 4.2.3. please be advised that the session extension does not
consider global variables as a source of data, unless register_globals is
enabled. you can disable this functionality and this warning by setting
session.bug_compat_42 or session.bug_compat_warn to off, respectively. in unknown on line 0

1、php4.2以上版本不需要用session_register()注册session变量,直接用:
$_session["string"]=“string";
赋值。
2、用$_session["string"]获取变量值。
3、用$_session["string"][$n]可传递session数组。

两个测试页面:
//a.php
session_start();
echo $_session["x"]++;

//b.php
session_start();
echo $_session["x"];

运行a.php并不断刷新它,看看有什么结果
运行b.php看看能否在页面之间传送结果。
注意:a.php和b.php必须是同一个ie进程!
测试在register_globals = off下进行,一切正常。

wget 参数

wget -cbN

c 续传 b 后台执行 N 更新

-U --user-agent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; CIBA)"

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

--referer=URL 引用

 

WGet使用
wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.

所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。

wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完 毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

=================================================================================
wget的使用格式

Usage: wget [OPTION]... [URL]...用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://www.tldp.org/LDP/abs/html/在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

使用代理下载
wget -Y on -p -k https://sourceforge.net/projects/wvware/代理可以在环境变量或wgetrc文件中设定

# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/wget各种选项分类列表
==================================================================================

代码:

  $ wget --help

  GNU Wget 1.9.1,非交互式的网络文件下载工具。
  用法: wget [选项]... [URL]...

  长选项必须用的参数在使用短选项时也是必须的。

启动:

  -V, --version 显示 Wget 的版本并且退出。
  -h, --help 打印此帮助。
  -b, -background 启动后进入后台操作。
  -e, -execute=COMMAND 运行‘.wgetrc’形式的命令。

日志记录及输入文件:

  -o, --output-file=文件 将日志消息写入到指定文件中。
  -a, --append-output=文件 将日志消息追加到指定文件的末端。
  -d, --debug 打印调试输出。
  -q, --quiet 安静模式(不输出信息)。
  -v, --verbose 详细输出模式(默认)。
  -nv, --non-verbose 关闭详细输出模式,但不进入安静模式。
  -i, --input-file=文件 下载从指定文件中找到的 URL。
  -F, --force-html 以 HTML 方式处理输入文件。
  -B, --base=URL 使用 -F -i 文件选项时,在相对链接前添加指定的 URL。

下载:

  -t, --tries=次数 配置重试次数(0 表示无限)。
  --retry-connrefused 即使拒绝连接也重试。
  -O --output-document=文件 将数据写入此文件中。
  -nc, --no-clobber 不更改已经存在的文件,也不使用在文件名后
  添加 .#(# 为数字)的方法写入新的文件。
  -c, --continue 继续接收已下载了一部分的文件。
  --progress=方式 选择下载进度的表示方式。
  -N, --timestamping 除非远程文件较新,否则不再取回。
  -S, --server-response 显示服务器回应消息。
  --spider 不下载任何数据。
  -T, --timeout=秒数 配置读取数据的超时时间 (秒数)。
  -w, --wait=秒数 接收不同文件之间等待的秒数。
  --waitretry=秒数 在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
  --random-wait 接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
  -Y, --proxy=on/off 打开或关闭代理服务器。
  -Q, --quota=大小 配置接收数据的限额大小。
  --bind-address=地址 使用本机的指定地址 (主机名称或 IP) 进行连接。
  --limit-rate=速率 限制下载的速率。
  --dns-cache=off 禁止查找存于高速缓存中的 DNS。
  --restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。

目录:

  -nd --no-directories 不创建目录。
  -x, --force-directories 强制创建目录。
  -nH, --no-host-directories 不创建含有远程主机名称的目录。
  -P, --directory-prefix=名称 保存文件前先创建指定名称的目录。
  --cut-dirs=数目 忽略远程目录中指定数目的目录层。

HTTP 选项:

  --http-user=用户 配置 http 用户名。
  --http-passwd=密码 配置 http 用户密码。
  -C, --cache=on/off (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
  -E, --html-extension 将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
  --ignore-length 忽略“Content-Length”文件头字段。
  --header=字符串 在文件头中添加指定字符串。
  --proxy-user=用户 配置代理服务器用户名。
  --proxy-passwd=密码 配置代理服务器用户密码。
  --referer=URL 在 HTTP 请求中包含“Referer:URL”头。
  -s, --save-headers 将 HTTP 头存入文件。
  -U, --user-agent=AGENT 标志为 AGENT 而不是 Wget/VERSION。
  --no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
  --cookies=off 禁用 cookie。
  --load-cookies=文件 会话开始前由指定文件载入 cookie。
  --save-cookies=文件 会话结束后将 cookie 保存至指定文件。
  --post-data=字符串 使用 POST 方法,发送指定字符串。
  --post-file=文件 使用 POST 方法,发送指定文件中的内容。

HTTPS (SSL) 选项:

  --sslcertfile=文件 可选的客户段端证书。
  --sslcertkey=密钥文件 对此证书可选的“密钥文件”。
  --egd-file=文件 EGD socket 文件名。
  --sslcadir=目录 CA 散列表所在的目录。
  --sslcafile=文件 包含 CA 的文件。
  --sslcerttype=0/1 Client-Cert 类型 0=PEM (默认) / 1=ASN1 (DER)
  --sslcheckcert=0/1 根据提供的 CA 检查服务器的证书
  --sslprotocol=0-3 选择 SSL 协议;0=自动选择,
  1=SSLv2 2=SSLv3 3=TLSv1

FTP 选项:

  -nr, --dont-remove-listing 不删除“.listing”文件。
  -g, --glob=on/off 设置是否展开有通配符的文件名。
  --passive-ftp 使用“被动”传输模式。
  --retr-symlinks 在递归模式中,下载链接所指示的文件(连至目录则例外)。

递归下载:

  -r, --recursive 递归下载。
  -l, --level=数字 最大递归深度(inf 或 0 表示无限)。
  --delete-after 删除下载后的文件。
  -k, --convert-links 将绝对链接转换为相对链接。
  -K, --backup-converted 转换文件 X 前先将其备份为 X.orig。
  -m, --mirror 等效于 -r -N -l inf -nr 的选项。
  -p, --page-requisites 下载所有显示完整网页所需的文件,例如图像。
  --strict-comments 打开对 HTML 备注的严格(SGML)处理选项。

递归下载时有关接受/拒绝的选项:

  -A, --accept=列表 接受的文件样式列表,以逗号分隔。
  -R, --reject=列表 排除的文件样式列表,以逗号分隔。
  -D, --domains=列表 接受的域列表,以逗号分隔。
  --exclude-domains=列表 排除的域列表,以逗号分隔。
  --follow-ftp 跟随 HTML 文件中的 FTP 链接。
  --follow-tags=列表 要跟随的 HTML 标记,以逗号分隔。
  -G, --ignore-tags=列表 要忽略的 HTML 标记,以逗号分隔。
  -H, --span-hosts 递归时可进入其它主机。
  -L, --relative 只跟随相对链接。
  -I, --include-directories=列表 要下载的目录列表。
  -X, --exclude-directories=列表 要排除的目录列表。
  -np, --no-parent 不搜索上层目录。
 

=================================================================================
 wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
    1、下载整个http或者ftp站点。
    wget http://place.your.url/here
    这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。

    wget -r http://place.your.url/here
    这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。

    要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
    这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。

    2、断点续传。
    当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
    wget -c http://the.url.of/incomplete/file
    使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。

    3、批量下载。
    如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)

    4、选择性的下载。
    可以指定让wget只下载一类文件,或者不下载什么文件。例如:
    wget -m --reject=gif http://target.web.site/subdirectory
    表示下载http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件类型,--reject=LIST拒绝接受的文件类型。

    5、密码和认证。
    wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
    --http-user=USER设置HTTP用户
    --http-passwd=PASS设置HTTP密码
    对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。

    6、利用代理服务器进行下载。
    如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
    http-proxy = 111.111.111.111:8080
    ftp-proxy = 111.111.111.111:8080
    分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
    --proxy-user=USER设置代理用户
    --proxy-passwd=PASS设置代理密码
    这两个参数。
    使用参数--proxy=on/off 使用或者关闭代理。
    wget还有很多有用的功能,需要用户去挖掘。