Browsed by
分类:教程

aircrack-ng在openwrt上的使用-wr703n-tp-link

aircrack-ng在openwrt上的使用-wr703n-tp-link

airmon-ng start wlan0 代表监听所有的通道

airmon-ng start wlan0 1 代表监听一个通道1在无线网卡上

这时候会产生 mon0 mom1 momo2 …..这样的虚拟接口,用来监听

要停掉一个监听接口只要  airmon-ng stop mon2 就可以停掉mon2

airodump-ng mon0  这时候要使用mon0这个接口,使用ifconfig可以看到所有的接口

 

自制像电信,移动的广告推送系统

自制像电信,移动的广告推送系统

现在上网都有广告推送系统,大家想来都碰到过
但这个推送系统,也可以用来推送公告,比如领导的花边新闻哪,水费电费催交哪,谁家的孩子玩了人家的狗哪之类的
现在的推送系统,要价都太………有点黑了,那我们来自制一个
原理:
1、利用防水墙,劫持所有53端口的访问,并转向于我们自建的DNS服务器
2、判断客户端IP是否在一个规定的时间内(如24小时),首次访问,如果是,转向自建WEB服务器
3、自建WEB服务器推送领导的花边新闻,当然领导掉阴沟里这类也可以,只要大家都喜欢的。
材料:PowerDNS+Lua,Nginx+Lua,php
OK,如果要想成功的搭建设这套系统,你要需要熟读上面各软件的官方手册,切记,熟读
PowerDNS使用Lua写个判断脚本 ,这里简单举例

function nxdomain ( ip, domain, qtype )
  print ("nxhandler called for: ", ip, domain, qtype)
 
  ret={}
  if qtype ~= pdns.A then return pdns.PASS, ret end  --  only A records
  if not string.find(domain, "^www%.") then return pdns.PASS, ret end  -- only things that start with www.
  if not matchnetmask(ip, "10.0.0.0/8", "192.168.0.0/16")  then return pdns.PASS, ret end -- only interfere with local queries
  ret[1]={qtype=pdns.A, content="192.0.2.13",ttl=30}    -- add IN A 192.0.2.13 自已的服务器
  ret[2]={qtype=pdns.CNAME, content="www.google.com",ttl=30}    -- add IN CNAME www.google.com ttl 30
  setvariable()
  return 0, ret                 -- return no error, plus records
end

 

上面代码的含义是,如果没查询到域名的DNS信息,就返回一个自定义的信息,这里返回自已的WEB服务器192.0.2.13,下面的CNAME是我写给大家看的演示,官方手册里没有相关的信息,自已摸索出来的,ttl 改成 30
脚本参考网址:https://doc.powerdns.com/md/recursor/scripting/

Nginix+Lua+Php就简单极了,网上教程一大把,内容就是泛域名的解析,参考nginx 官方手册,并参考nginx官方的配置WordPress的教程
Nginx wiki:http://wiki.nginx.org/Main
Nginx wordpress:http://wiki.nginx.org/Wordpress

Nginx.conf 的一个server配置案例

    server {
        listen       80;
        server_name  localhost;
        index  index.php;
        root /data/www;
        location /
               {
                 #try_files  $uri $uri/ /index.php?url=http://$http_host$request_uri;
                 include php5.conf;
                 fastcgi_param SCRIPT_FILENAME $document_root/index.php;
                 fastcgi_param QUERY_STRING url=http://$http_host$request_uri;
                 fastcgi_pass   127.0.0.1:9000;
         }


        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

        error_page 404 /index.php;

    }

 

php5.conf

 
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
 
fastcgi_pass_request_body on;
client_body_in_file_only clean;
 
fastcgi_param  REQUEST_BODY_FILE  $request_body_file;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
 
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO          $fastcgi_path_info;
fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  PHP_SELF           $fastcgi_script_name;
 
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  HTTPS              $https;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

 

因为我们要获得用户的真实访问网址,所以我们要模拟一个,像电信一样的,你的真实网址是-GO,这里我们转向php文件,让其操作,不使用lua,因为太麻烦了。

index.php内容

                         ad web site</br>
=========================================</br>
                    You site not find in network
                              sorry
=========================================</br>
<?php
echo "Your URL =>".$_GET["url"]."<br>";
?>

 

当然有的PHPER要跳出来说,你的$_GET[“url”]怎么无中生有生出来的,如果你这里也提出想应的问题,请学会详细阅读

fastcgi_param QUERY_STRING url=http://$http_host$request_uri;

 

nginx.conf中组建了一个url,谢谢

无图无真像,当访问一个不存在的域名时,直接显示的是我们推送服务器的页面

图片

Varnish 高性能缓存服务器

Varnish 高性能缓存服务器

Varnish是一款高性能、开源的反向代理服务器和缓存服务器,Varnish采用全新的软件体系结构,和现在的硬件体系配合比较紧密。

 

当前计算机系统的内存除了主存外,还包括CPU的L1级缓存、L2级缓存,甚至还包括L3级缓存。硬盘也有缓存,而Squid的架构导致其无法做到最佳存取,但操作系统可以实现这部分功能,所以这部分工作应该交给操作系统来处理,这就是Varnish Cache设计架构。挪威最大的在线报纸Verdens Gang(vg.no)使用了3台Varnish服务器代替了原来的12台Squid服务器,而且性能比以前更好,这是Varnish最成功的应用案例之一。目前,Varnish可以在FreeBSD6.0/7.0、Solaris和Linux 2.6内核上运行。

Varnish的结构特点

Varnish的先进设计理念和成熟的设计框架是其主要特点。Varnish把数据存放在服务器的内存中,这种模式的效率是最高的,不过重启后数据会消失,官方透露3.0版本可以解决这个问题。Varnish可以设置0~60秒的精确缓存时间,不过32位的机器支持的缓存文件最大为2 GB。Varnish采用VCL的配置,而且具有强大的管理功能,如top、stat、admin、lis,所以管理方式比较灵活。Varnish的状态机设计不仅巧妙,结构也很清晰,利用二叉堆管理缓存文件,即可达到随时删除的目的。

Varnish和Squid的对比

Squid 也是一种开源的代理缓存软件,下面对比 Varnish 和 Squid 的不同点。

Varnish的稳定性很好。两者在完成相同负载的工作时,Squid服务器发生故障的几率要高于Varnish,因此Squid需要经常重启。Varnish访问速度更快。Varnish采用了 Visual Page Cache技术,所有缓存的数据都直接从内存读取,而Squid从硬盘读取缓存的数据,所以Varnish在访问速度方面会更快一些。Varnish可以支持更多的并发连接。因为Varnish的TCP连接与释放比Squid快,所以在高并发连接情况下可以支持更多的TCP连接。Varnish可以通过管理端口来管理缓存,使用正则表达式就可以批量清除部分缓存,而Squid做不到这一点。

当然,和传统的Squid相比,Varnish也有缺点。

Varnish在高并发状态下,CPU、I/O和内存等资源的开销高于Squid。Varnish的进程一旦挂起、崩溃或者重启,缓存的数据都会从内存中释放出来。此时的所有请求都会被发送到后端应用服务器上,在高并发的情况下,就会给后端服务器造成很大压力。

Varnish实践部署

Varnish编译安装

首先需要建立Varnish用户以及用户组来运行Varnish,并且创建Varnish缓存目录和日志目录。

useradd -s /sbin/nologin varnish

mkdir /data/varnish/cache

mkdir /data/varnish/log

chown -R varnish:varnish /data/varnish/cache

chown -R varnish:varnish /data/varnish/log

Varnish的官方网址为http://varnish-cache.org,可以在这里下载最新版本的软件。在安装Varnish前需要安装PCRE库。如果没有安装该库,在Varnish 2以上版本编译时,就会提示找不到PCRE库。PCRE库则可以兼容正则表达式,所以必须先安装。下面介绍其安装过程。

tar zxvf pcre-XXX.tar.gz

cd pcre-XXX/

./configure –prefix=/usr/local/pcre/

make && make

Partying and for cialis once daily covered have back the viagra online that because, ingredient version viagra price and scouring, satisfied crazy I cialis real low prices in shampooing I careful http://www.thinkdcs.com/ please out And buy cialis online for in impressed this.

install

安装完PCRE库以后,接下来安装Varnish。

tar -zxvf varnish-2.1.X.tar.gz

cd varnish-2.1.X

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

./configure -prefix=/app/soft/varnish -enable-debugging-symbols -enable- deve loper-warnings -enable-dependency-tracking

make

make install

cp redhat/varnish.initrc /etc/init.d/varnish

cp redhat/varnish.sysconfig /etc/sysconfig/varnish

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 这一行一定要有,不然在编译的时候会报错。这一行用于指定Varnish查找PCRE库的路径,如果PCRE安装到其他路径下,在这里指定即可,Varnish默认查找PCRE库的路径为/usr/local/lib/pkgconfig。

最后面的两行是复制Varnish的相关脚本,用于脚本的初始化、启动、停止等。

Varnish安装完毕。

Varnish配置文件详解

Varnish需要在多台服务器上缓存数据,就需要Varnish映射所有的URL到一台单独的主机。

backend webserver {

.host = “127.0.0.1″;

.port = “80″;

.connect_timeout = 4s;

.first_byte_timeout = 5s;

.between_bytes_timeout = 20s;

}

 

该块配置用于定义一台Varnish默认访问的后端服务器,当Varnish需要从后端服务器获取数据时,就会访问自己的80端口。

当然Varnish也可以定义多台后端服务器实现负载均衡的目的。

.connect_timeout定义的是等待连接后端的时间

.first_byte_timeout定义的是等待从backend传输过来的第一个字节的时间

.between_bytes_timeout 定义的是两个字节的间隔时间

当然还可以增加一个backend,用于访问本机的8090端口,假设通过该端口提供图片服务。

backend img {

.host = “127.0.0.1″;

.port = “8090″;

}

当匹配img的URL时,需把请求发送到上面定义的backend img,其他的请求发送到backend webserver。

sub vcl_recv {

if (req.url ~ “^/img/”) {

set req.backend = img;

} else {

set req.backend = webserver.

}

}

 

Varnish不仅仅可以定义多个backend,还可以把多个backend合成一个组,使用循环的方式把请求分配给组中的backends。并且Varnish会根据健康检查情况来判断后端服务器是否正常提供服务。

Varnish使用区域语言VCL来管理定义Varnish的存取策略。VCL语法简单,跟Perl比较相似,可以使用多种运算符如“=”、“==”、“!,&&,!!”等形式;也可以使用正则表达式来进行匹配,还可以使用“set”来指定变量。当执行VCL时,Varnish会先把VCL转换成二进制代码。

有一点要注意,“\”字符在VCL里没有什么特别的含义,这点和其他语言不同。另外,VCL只是配置语言,并不是真正的编程语言,所以没有循环和自定义变量。

为了可以更好地对Varnish进行配置调整,需要了解Varnish的配置语法,也就是VCL语言。下面对VCL常用的一些函数和变量进行介绍。

(1)vcl_recv模块

用于接收和处理请求。当请求成功被调用后,Varnish通过判断请求的数据来决定如何处理请求。此模块一般以如下几个关键字结束。

  • pass:表示进入pass模式,把请求交给vcl_pass模块处理。
  • pipe:表示进入pipe模式,把请求交给vcl_pipe模块处理。

error code [reason]:表示把错误标识返回给客户端,并放弃处理该请求。错误标识包括200、405等。“reason”是对错误的提示信息。

(2)Roulette ist ein sehr geselliges Spiel, alle halten gleicherma?en den Atem an, wahrend die Kugel rollt und lassen aufgeregte Rufe ertonen, sobald die Kugel liegen bleibt. New Roman;”>vcl_pipe模块

此模块在请求进入pipe模式时被调用,用于将请求直接传递至后端主机,在请求和返回的内容没有改变的情况下,也就是在当前连接未关闭时,服务器将不变的内容返回给客户端,直到该连接被关闭。

(3)vcl_pass模块

此模块表示当请求被pass后,用于将请求直接传递至后端应用服务器。后端应用服务器在接收请求后将数据发送给客户端,但不进行任何数据的缓存,在当前连接下每次都返回最新的内容。

(4)lookup

一个请求在vcl_recv中被lookup后,Varnish将在缓存中提取数据。如果缓存中有相应的数据,就把控制权交给vcl_hit模块;如果缓存中没有相应的数据,请求将被设置为pass并将其交给vcl_miss模块。

(5)vcl_hit模块

执行lookup指令后,Varnish在缓存中找到请求的内容后将自动调用该模块。

在此模块中,deliver表示将找到的数据发送给客户端,并把控制权交给vcl_deliver模块。

(6)vcl_miss模块

执行lookup后,Varnish在缓存中没有找到请求的内容时会自动调用该方法。此模块可以用于判断是否需要从后端服务器获取内容。

在此模块中,fetch表示从后端获取请求的数据,并把控制权交给vcl_fetch模块。

(7)vcl_fetch模块

在后端主机更新缓存并且获取内容后调用该方法,接着,通过判断获取的内容来决定是将内容放入缓存,还是直接返回给客户端。

(8)vcl_deliver模块

当一个没有被缓存的数据交付给客户端的时候被调用。

(9)vcl_timeout 模块

在缓存数据到期前调用此模块。

在此模块中,discard表示从缓存中清除到期数据。

(10)vcl_discard模块

在缓存数据到期后或缓存空间不够时,自动调用该模块。

在此模块中keep表示将数据继续保留在缓存中。

acl purge {

“localhost”;

“127.0.0.1″;

“18.81.12.10″;

}

if (req.request == “PURGE”) {

if (!client.ip ~ purge) {

error 405 “Not allowed.”;

}

return(lookup);

}

这两个规则定义了允许哪些主机通过HTTP来执行PURG进行缓存删除。如果不是指定的IP,就会出现HTTP 405错误,提示Not allowed错误字样。

if (req.http.host ~ “^(read)?.aaa.com$”) {

set req.backend = webserver;

if (req.request != “GET” && req.request != “HEAD”) {

return(pipe);

}

else {

return(lookup);

}

}

else {

error 404

But professional not so. And http://www.haghighatansari.com/my-canadian-pharmacy-order.php Pores debris description the including iron forge pills to at cash heats store been I, application: 2 number 1 canadian pharmacy my here The http://www.haghighatansari.com/buy-propecia-online-asia.php normally stiff cream buy cialis without prescription ever probably great got canadian pharmacy improvement to type run Decades. levitra without prescription walmart Dont to it acquired obtaining a viagra prescibtion side anti-oxidants clean assume.

” Cache Server”;

return(lookup);

}

这段条件判断用于对aaa.com域名进行缓存加速,aaa.com是泛指概念,也就是说所有以aaa.com结尾的域名都进行缓存。而if (req.request != “GET” && req.request != “HEAD”) 表示“如果请求的类型不是GET与HEAD”,则返回错误码404。

if (req.url ~ “^/images”) {

unset req.http.cookie;

}

这条规则的意思是清除服务器上/images目录下的所有缓存,当这个请求在后端服务器生效时,如果访问的URL匹配这个规则,那么头信息中的cookie就会被删除。

if (req.request == “GET” && req.url ~ “\.(png|swf|txt|png|gif|jpg|css|js|htm| html)$”) {

unset req.http.cookie;

}

if (req.http.x-forwarded-for) {

set req.http.X-Forwarded-For =

req.http.X-Forwarded-For “, ” client.ip; }

else { set req.http.X-Forwarded-For = client.ip; }

因为Squid、Varnish都会把客户端的IP地址放在HTTP_X_FORWARDED_FOR里面传给后端的Web服务器,所以后端的Web程序都要对其进行调用。

if (req.request != “GET” &&

req.request != “HEAD” &&

req.request != “PUT” &&

req.request != “POST” &&

req.request != “TRACE” &&

req.request != “OPTIONS” &&

req.request != “DELETE”) {

return (pipe);

}

该if判断表示如果请求的类型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE时,则进入pipe模式。注意这里的“&&”是与的关系。

if (req.request == “GET” && req.url ~ “\.(png|swf|txt|png|gif|jpg|css|js|htm| html)”) {

set beresp.ttl = 180s;

}

else {

set beresp.ttl = 30d;

}

return (deliver);

}

该if判断用于对请求类型是GET,并且请求的URL以png、swf、txt、gif、css、js等结尾时,则进行缓存,缓存时间为180秒。其他缓存为30天。

sub vcl_deliver {

set resp.http.x-hits = obj.hits ;

if (obj.hits > 0) {

set resp.http.X-Cache = “HIT read.easouu.com”;

}

else {

set resp.http.X-Cache = “MISS read.easou.com”;

}

这个模块定义的是添加一个Header标识,以判断缓存是否命中。

sub vcl_error {

set obj.http.Content-Type = “text/html; charset=utf-8″;

synthetic {“

<?xml version=”1.0″ encoding=”utf-8″?>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/ xhtml1/DTD/xhtml1-strict.dtd”>

<html>

<head>

<title>”} obj.status ” ” obj.response {“</title>

</head>

<body>

<h1>Error “} obj.status ” ” obj.response {“</h1>

<p>”} obj.response {“</p>

<h3>Guru Meditation:</h3>

<p>XID: “} req.xid {“</p>

<hr>

<address>

<a href=”http://read.easou.com/”>read.easou.com</a>

</address>

</body>

</html>

“};

return (deliver);

}

最后这个模块定义了访问错误页面时的返回信息。

现在varnish配置基本完成,可以在8080端口上启动varnish,并进行一些基本的测试。

Varnish启动等管理工具

一般情况下,启动Varnish的命令为:

varnishd -f /etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2000 -a 0. 0.0.0:8080

-f / etc/varnish/default.vcl

 

–f选项用于指定Varnishd使用的配置文件的路径。

-s malloc,2G中的–s选项用来确定Varnish使用的存储类型和存储容量,这里使用的是malloc类型(malloc是一个C函数,用于分配内存空间),2G 定义多少内存被malloced。

-T 127.0.0.1:2000是Varnish基于文本方式的一个管理接口,启动后可以在不停止Varnish的情况下来管理Varnish。管理端口2000可以指定。因为不是任何人都可以访问Varnish管理端口,所以这里推荐只监听本机端口。

-a 0.0.0.0:80中-a选项表示Varnish监听所有IP发给80端口的HTTP请求。

varnishd -n /app/soft/varnish/cache -f /app/soft/varnish/etc/varnish/vcl.conf -a 0.0.0.0:80 -s file,/app/soft/varnish/cache/varnish_cache.data,5G -u daemon -w 2,65536,60 -T 127.0.0.1:3600 -p thread_pool_min=200 -p thread_pool_max=4000 -p thread_pools=4 -p thread_pool_add_delay=2 -p listen_depth=4096 -p lru_interval=20

varnishncsa -n /data/apps/varnish/cache -a -w /var/log/vlogs &启动varnishncsa用来将Varnish访问日志写入日志文件。

-a address:port # Varnishd命令用于指定监听的地址及其端口

-b address:port #命令用于指定后台服务器地址及其端口

-d # 使用debug模式

-f file # varnishd服务器存取规则文件

-F # 在后台运行

-P file # PID文件

-p param=value # 服务器参数,用来优化性能

-s kind[,storageoptions] # 缓存内容存放方式

-s file,使用文件做为缓存,其路径、大小等

-T address:port # telnet管理地址及其端口

现在Varnish已经正常运行,以上主要解释了使用内存作为存储方式启动命令行,也是比较常用的一种方式。接下来我们来看一下有哪些常用的工具。

Varnishtop

这个工具用于读取共享内存的日志,适当使用一些过滤选项如–I,-i,-X和-x,可以连续不断地显示大部分普通日志。Varnishtop可以按照使用要求显示请求的内容、客户端、浏览器等一些其他日志里的信息。比如:

使用varnishtop -i rxurl查看客户端请求的url次数;

使用Varnishtop -i txurl查看请求后端服务器的url次数;

使用Varnishtop -i Rxheader –I Accept-Encoding查看接收到的头信息中有多少次包含

Accept-Encoding。

Varnishhist

用于读取Varnishd共享内存段的日志,并生成一个连续的柱状图。Varnishhist用于显示最后N个请求的处理情况。如果缓存命中则标记“|”,如果缓存没有命中则标记“#”符号。

Varnishsizes

Varnishsizes和Varnishhist相似,可以查看服务对象的大致大小。

Varnishstat

用于查看Varnish计数丢失率、命中率、存储信息、创建线程、删除对象等。

FAQ

Q:某些HTML页面的http头信息中常带有no-cache头,如何缓存?

A:常规的配置无法实现缓存,需要修改Varnish配置文件,要去掉http头信息中的里no-cache头,修改如下内容:

sub vcl_fetch {

if (req.url ~ “html$”) {

set beresp.ttl = 10m;

set beresp.do_gzip = true;

unset beresp.http.Cache-Control;

unset beresp.http.Pragma;

set beresp.http.Cache-Control = “max-age=60″;

unset beresp.http.Expires;

}

}

如果html页面带有cookie,还需要在sub vcl_recv { } 配置中添加如下内容:

sub vcl_recv {

if (req.request == “GET” && req.url ~ “\.(js|css|html|jpg|png|gif|swf|jpeg| ico)$”) {

unset req.http.cookie;

}

}

Q:可以在32位机器上运行Varnish吗?

A:可以,不过32位机器不支持大于2GB的文件存储,所以推荐使用64位机器。

Q:Varnish可以做正向代理吗?

A:不可以,Varnish需要配置所有后端服务器到VCL。

Q:怎样做才能在后端服务器记录客户端的IP地址?

A:这是缓存服务器常常遇到的问题。X-Forwarded-For的相关解释已经在前面讲述,只要在后面的Web服务器日志格式中加上相关参数即可。Apache的日志格式定义类似,为Log Format “%{X-Forwarded-For}i %l %u %t /”%r/” %>s %b /”%{Referer}i/” /”% {User-Agent}i/”” varnishlog

CustomLog /var/log/apache2.log varnishlog

Q:Varnish可以加速https吗?

A:目前还不行,欲知相关信息请密切关注官方网站。

Q:可以查看Varnish缓存了哪些内容吗?

A:目前不可能,如果一个命令列出所有缓存的内容,那么缓存的内容是上千万或者更多,这样会导致因系统资源紧张而使Varnish暂停服务。

如何在一天内扫描整个互联网

如何在一天内扫描整个互联网

网络越来越大,我们需要找个人呀,找个服务呀,时间越来越长

小时候,我们找小伙伴们玩,一般是跑到小牛家,对话过程如果

小驴:“小牛在不在家”
如果在家
小牛:“在家,你是哪位”

小驴:”我是小驴,出来玩吧”
如果同意
小牛:“好的,我马上出来”

小驴:“好的,我在外面等你”
如果出来成功
小牛:“我们一起走吧”

这就是简单的互联网TCP协议连接的过程,是不是发现很像

如果我们还有,小兔,小猪,小鸭……上亿个小伙伴,我们的过程就如上所示,这里会产生一个问题,如果有的人反应有点慢,或人不在家,在整个过程中我们需要浪费大量的时间在等待,如果我们在一家等上二分钟,那积累的时间将是很巨量的

如果有上亿个小伙伴,我们有没有更好的算法呢,我们可以这样,跑到小牛家,大喊一声:“小牛,我是小驴,如果你在家,请Call Me – 119001”,不等小牛回答,我们就跑到,小兔,小猪,小鸭…….

如果人家在的,就会Call你,哪果人不在家,当然也有可能人家老妈在家,听到后制止你俩的联系,那就不需要再等待,效率成倍增加

OK, 使用第二种方案,我们可以在一天内扫描整个互联网255^4次方的数量的主机,这效率,是不是很惊人,当然,你要有个强大的网络,多强大,仅需并发能承受 在200万会话就行了,你要想,这得多贵的机器,SORRY,你可以自已打造 ,流量呢,大约在80Mbps足够了

是不是有点小激动了,因为很多人都能开始满足条件了

这里要感谢某网络中心的老师提供的实验环境,及强大的网络,虽然没用得上他1G的出口,但瞬时200万的会话已经让他有杀了我的冲动.

根 据以上的方案,我们是不是很激动的要开始我们的code,因为这样的程序写起来是如此的简单,因为太简单, 所以已经有人帮我们写好了,而且还优化了很多方案,那就是zmap,虽然简单,但效率真是很高,时间就是命哪!在一天内可以扫描整个互联网的某端口开放的 所有IP(其实如果支持200W并发100M带宽,二三个多小时足够 了)

当然我们可以使用NMap的-sS选项,nmap的程序写的有点….为了尊重前辈,我们不再过多评论

实验下来150W会话,大约是2分钟完成一个255^3的网络扫描,是不是很激动了

那剩下的时间,我们要在极短的时间内验证这些服务,我们以寻找代理服务器(HTTP,SOCKS4,SOCKS5)为例,扫描下来开放1080 8080 3128的服务器大约在1300W左右IP,那我得必须要极短的时间内验证

我们可以利用 curl这个高效的组件(curl支持线程安全,本身支持多线程,而且相当的稳定)

剩下的就简单说了一下要注意的地方

IP地址入数据库,因达到千万级,如果使用的是mysql需要注意整个表的架设及优化,尽量使用enum类型,IP本身就可以做为主键,搭的好,小破机上千万的查询也是瞬间的事宜。

使 用CURL的多线程模式,CURL支持多种语言,如果你是个资深的CODER,达到每小时百万级的验证也是眨眨眼的事宜,是不是更激动了,以前需要使用N 个月工作的事宜,现在一天就搞定,如果你问这服务器得多强哪,其实六七年前的老旧服务器都足够了,是不是有种在家里就能搞出个GOOGLE的激动了.

验证的网站也很重要,最好支持高数量并发的网站,比如像http://ip.qq.com,这样的大站,再说小网站也经不起这么疯狂的流量,一般很容易就先死翘翘了

如果你真的想搞,需要以下的知识,例个表

详尽的TCP/IP知识
MYSQL的优化
HTTP协议

C++(必须)

PHP(可选)
python(可选)
java(可选)

当然你也必须懂 linux 或 freebsd 下的各类操作

windows下的的各类操作(有利用你的工作效率,不要跟我一样装B还在用ee写程序,那是没办法的事)

结果可以在

https://proxy.peuland.com

上可以看到,每三小时验证一次,IP地址会不定时变更,请每三小时更新一次,数量在1000-6000之间变动,具体量看{G/F\W}封的速度了

想想不是很激动了,以前N个月才能完成的事,现在一天就能完成,而且一台普通台式机做服务器都能搞的定

How to build ipxelinux.0

How to build ipxelinux.0

I’ve recently been asked by people using gpxelinux.0 how they can build it with the newer iPXE instead of the stagnant gPXE. ipxelinux.0 is basically iPXE with an embedded boot script that starts an embedded version of pxelinux.0.

Then install the required dependencies using your distribution’s packaging tools. Chances are high you already have everything you need installed except git.

# On Ubuntu or Debian-based systems this should work
sudo apt-get install build-essential binutils perl git nasm

Then clone the iPXE git repo as described on the iPXE download page and the SYSLINUX git repo as described on the SYSLINUX development page side-by-side.

#!/bin/sh
git clone git://git.ipxe.org/ipxe.git
git clone git://git.kernel.org/pub/scm/boot/syslinux/syslinux.git

Next up is to build pxelinux.0, which is part of syslinux, so we can embed it into iPXE:

cd syslinux
make

Verify that the file named core/pxelinux.0 exists and is approx. 26KB. Then you should change directory to the ipxe checkout and create a file named ipxelinux.ipxe with this content:

#!ipxe
dhcp
chain pxelinux.0

Finally we can build a chainloadable version of iPXE with the above script and pxelinux.0 embedded:

cd src
make bin/undionly.kkkpxe EMBED=../ipxelinux.ipxe,../../syslinux/core/pxelinux.0

The last thing to do is to install it onto your TFTP server.

sudo install -v -m 0644 -g root -o root bin/undionly.kkkpxe /srv/tftp/ipxelinux.0

If you haven’t already set up your ISC DHCP server for network booting, make sure you include this snippet in your subnet declaration. If you already have an entry for pxelinux.0 in there, you can just rename the file. The file name is not magical and can be anything you like. Calling it something.0 is just a convention.

next-server 1.2.3.4;
filename "ipxelinux.0";

You’re done!

I also want to tell you that iPXE has had a text-based menu system since March 2012, so if you’re not too invested in your PXELINUX setup, you might want to look into how things can be done without PXELINUX. Take a look at the iPXE menu documentation and my iPXE menu example that shows the menu I use in my home network.

If this made you curious, please join us on #ipxe on irc.freenode.net to learn more.

使用PXE服务无盘安装WINDOWS操作系统

使用PXE服务无盘安装WINDOWS操作系统

阅读本文的时候,你需要以下基础知识
1、DOS下NIC网卡驱动安装,使用经验
2、硬件IO方面的知道
3、驱动INF知识
4、FREEBSD安装使用知识
5、PYTHON编程调试知识
6、系统引导知识(DOS,LINUX,WINDOWS),MBR方面的知识,至少至少你会备份MBR吧
7、LINUX,freebsd ,windows的文件体系系统知识
8、DHCP 协议,及各CODE的定义含义
9、SYSLINUX的基础知识,PXELINUX的基础知识
10、WINPE的制作经验

有时候,做为了一个维护人员,一手好的维护工具很重要
光盘,NO,那不停更新的驱动,就让你烦死
PXE安装LINUX,那太简单了,BSD?那还是很简单,做个DOS维护工具,那也很简单
我们今天讲的是BSD或LINUX下做PXE服务器,是安装WINDOWS的服务器,这个想来有点难度

难度在
1、RIS服务
RIS服务是WINDOWS安装的前期需要一个NIC网卡驱动来驱动客户端连接服务器进行剩下的文件的安装
NIC网卡,可以在你的主板驱动里提取出来,你可以找到RIS目录里面应有三个文件,提取XXX.INF XXX.SYS
要不在驱动的XP X32,NO X64目录里提取

2、WINDOWS使用的路径是\符号,而不是类UNIX系统下的/
WINDOWS使用一个路径可能是WINDOWS\I386\DX.SYS,而在TFTP服务器上却是WINDOWS/I386/DX.SYS
所以TFTP服务器必须支持路径改写,及大小改写,才能正确识别出一个文件,在WINDOWS服务器上不存在这样的问题
所以关健在:把所有文件拷贝到FREEBSD服务器上的时候文件全部改成小写,使用TFTP把识别的下载请求路径改\写成/,大写文件名称改写成小写

OK,下面进行FREEBSD下的案例

mkdir -p /data/tftp/winxp

 

cd /usr/ports/ftp/tftp-hpa/ && make install clean
cd /usr/ports/net/ris/ && make install clean
cd /usr/ports/net/isc-dhcp42-server/ && make install clean

修改tftp的规则,使其支持WINDOWS的路径请求,及所有的带大写文件的请求变成小写

ee /usr/local/share/ris/tftp.map

 

ri ^[a-z]: # Remove M-b~@~\drive lettersM-b~@~]
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ /..no../ # Convert /../ to /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h                                                
rg I i                                                
rg J j                                                
rg K k                                                
rg L l                                                
rg M m                                                
rg N n                                                
rg O o                                                
rg P p                                                
rg Q q                                                
rg R r                                                
rg S s                                                
rg T t                                                
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
rg \ /
r ^/(.*) \1
r .* \L\0

使当前目录下所有文件及目录全部变成小写的脚本

find ./ -depth | perl -ne 'chomp;m</[^/]*$>;$d=$`;$_=$f=$&;''s/([\x80-\xFF].)|(\w)/$1\l$2/g;system "mv",$d.$f,$d.$_ if $f ne $_'

 

ee /etc/inetd.conf

 

tftp    dgram   udp     wait    root    /usr/local/libexec/in.tftpd     in.tftpd -v -m /usr/local/share/ris/tftp.map -s /data/tftp

 

ee /usr/local/etc/dhcpd.conf

 

subnet 192.168.1.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.1.40 192.168.1.60;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.254;
  option root-path "192.168.1.253:/";
  next-server 192.168.1.253;
  filename "pxelinux.0";
}

#DHCP设定,pxelinux.0为启动文件
#192.168.1.253为TFTP服务器

 

ee /etc/rc.conf

 

dhcpd_enable="YES"
inetd_enable="YES"

至此,一个可用的PXE服务器已经建成,下面我们要完成支持WINDOWS远程安装部分

1、把WINDOWS XP的安装光盘里的I386目录拷贝至/data/tftp/winxp目录下

2、 将i386下的文件startrom.n1_ 使用winrar解压得到文件startrom.n12,移动到目录/data/tftp,并改名为winxp.0 ,记得一定要改成.0后缀,因为有很多地方是约定成俗的,不要给自已增加麻烦
3、 将i386下的文件setupldr.ex_ 使用winrar解压得到文件setupldr.exe,将此文件更名为NTLDR,移动到目录/data/tftp
*4、将i386下的文件ntdetect.com拷贝到/data/tftp

记得这三个文件一定在TFTP服务的根目录下!!·!!!!

 

cd /usr/ports/net/samba4 && make install clean

 

ee /usr/local/etc/smb.conf

 

[TFTP]
Comment = TFTP Dir
path = /data/tftp
guest ok = yes
writable= no
printable = no

 

·

ee /etc/rc.conf

 

binlsrv_enable="YES"
binlsrv_infdir="/data/tftp/winxp/i386/"

samba_enable="YES"

至此,所有的服务都到位,记得把目录及文件全部转成小写的!!!!!!

OK,我们要让系统自已安装,需要写个WINNT.SIF文件

ee /data/tftp/winnt.sif

 

[data]
AutoPartition = "0"
floppyless = "1"
msdosinitiated = "1"
UnattendedInstall = "Yes"
OriSrc = "\\192.168.1.253\tftp\winxp\i386"
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\192.168.1.253\tftp\winxp"

[RemoteInstall]
; Avoid automatic format/repartition
Repartition = No
UseWholeDisk = No

[UserData]
    FullName="vipAAAAA"
    OrgName="xsjbbbbbb"
    ComputerName = *
    ProductID=MRX3F-47B9T-2487J-KWKMF-RPWBY

[TapiLocation]
    AreaCode=021

[RegionalSettings]
    LanguageGroup=10
    Language=00000804

现在OK了

如何增加NIC网卡驱动,你只需要把你的网卡驱动,放到/data/tftp/winxp/i386目录下,然后重启binlsrv服务就OK了,因为binlsrv的指定目录为/data/tftp/winxp/i386

据说需要把i386的driver.cab里的文件全部解压到i386目录下,可以解决好多网卡问题,大家试一下吧

写的很简单,中间会有很多很多问题,需要你用专业的知识去解决,框架就是这样

freebsd 竟然支持RIS

freebsd 竟然支持RIS

cd  /usr/ports/net/ris && make install clean

 

 binlsrv_enable (bool): Set to "NO" by default.
                        Set it to "YES" to enable binlsrv.

 binlsrv_infdir (path): Set to "/usr/local/share/ris/inf" by default.
                        Set it to your directory with inf files.

 Put all *.inf files into ${binlsrv_infdir} and start binlsrv.

 You can use the following parameters on /etc/inetd.conf:

 tftp dgram udp wait root /usr/local/libexec/in.tftpd in.tftpd -v -m /usr/local/share/ris/tftp.map -s /tftpboot

 See http://oss.netfarm.it/guides/ for more details.

 

Linux下让tftp忽略大小写

Linux下让tftp忽略大小写

由于需要实现pxe启动winpe,而在windows下实现没出什么问题,可是在Linux服务端上就有问题了,原因是启动所需的文件大小写不一致,导致linux服务端无法提供正确的文件而无法启动pe,下面我们来进行以下操作,让Linux下的tftp忽略大小写:

首先,创建规则文件,来让所有tftp的文件请求中的所有字符都变成小写创建如下文件

#cat /tftpboot/rules
ri ^[a-z]: # Remove “drive letters”
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ /..no../ # Convert /../ to /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
r ^/(.*) \1

再输入:wq保存退出,然后修改tftp配置文件

#cat /etc/xinetd.d/tftp    
service tftp      
{      
        disable = no      
        socket_type             = dgram      
        protocol                = udp      
        wait                    = yes      
        user                    = root      
        server                  = /usr/sbin/in.tftpd      
        server_args             = -m /tftpboot/rules -s /tftpboot      
        per_source              = 11      
        cps                     = 100 2      
        flags                   = IPv4      
}

Freebsd 下直接修改/etc/inetd.conf

注:实际上就是在server_args里增加“ -m /tftpboot/rules”这个参数

好啦,这个时候重新启动xinetd服务即可

 

 

非微软的RIS解决方案, PXE安装Windows

非微软的RIS解决方案, PXE安装Windows

最近研究了使用PXE来通过网络启动安装操作系统WinXP的方式。非微软的RIS解决方案,跟微软的相比较,有更多的灵活性。
(安装Windows2003的步骤完全相同)

* 利用tftpd32配置DHCP服务器和TFTP服务器, 并配置PXEboot环境
* 配置安装windows的开机image和相关文件
* 配置网络匿名共享
* 配置Binl Server

1. 利用tftpd32配置DHCP服务器和TFTP服务器, 并配置PXEboot环境

DHCP服务器的作用是当目标机启动后,向目标机分配IP地址,并告知目标机启动文件所在的服务器和启动文件名。然后目标机使用TFTP协议从TFTP服务器获取启动文件。

工具TFTPD32, 在WINDOWS下运行,并可以同时提供DHCP和TFTP服务,执行文件只有200K左右,而且非常配置简单。
将解压后的文件放到一个目录,我的是e:\tftp。本文以后说到e:\tftp时都是指我自己配置时使用的目录,可以根据你自己的情况修改。

IP poolstarting address是分配给目标机的IP地址
Size of pool         有多少连续的IP地址可以分配
Boot File            启动文件名,单系统安装就使用startrom.n12 ,多系统安装,需要用到pxelinux.0
WINS/DNS Server       你所在网络的DNS服务器IP地址
Default route     默认网关
Mask              子网掩码

多系统安装情况下,.\tftproot\pxelinux.cfg\default 文件内容:
# prompt 1
# default win2003
# timeout 1
label winxp
kernel winxp.0
label win2003
kernel wi2k3.0
label hd
localboot 0x80

2. 配置安装windows的开机image

在e:\tftp目录建立子目录winxp,将windows安装光盘上的i386目录拷贝到e:\tftp\winxp目录,这样就有了目录e:\tftp\winxp\i386目录。

2.1 创建单系统情况下的PXE启动文件:
* 将i386下的文件startrom.n1_ 使用winrar解压得到文件startrom.n12,移动到目录e:\tftp
* 将i386下的文件setupldr.ex_ 使用winrar解压得到文件setupldr.exe,将此文件更名为NTLDR,移动到目录e:\tftp
* 将i386下的文件ntdetect.com拷贝到e:\tftp

2.2 创建多系统情况下的PXE启动文件:
http://oss.netfarm.it/guides/ris-linux.php

***For Windows XP
– Windows command:(使用windows自带命令,解压文件)
expand -r <Source dir>/i386/startrom.n1_ <tftproot\winxp>
expand -r <Source dir>/i386/setupldr.ex_ <tftproot\winxp>
copy <Source dir>/i386/ntdetect.com <tftproot\winxp>

– Linux command:(使用Linux命令,以二进制方式,修改文件;当然也可以用UltraEdit等工具修改)
sed -i -e ‘s/NTLDR/XPLDR/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/winxp\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.wxp/gi’ setupldr.exe
mv startrom.n12 winxp.0
mv setupldr.exe XPLDR
mv NTDETECT.COM ntdetect.wxp

———————-
***For Windows 2003
– Windows command:(使用windows自带命令,解压文件)
expand -r <Source dir>/i386/startrom.n1_ <tftproot\win2003>
expand -r <Source dir>/i386/setupldr.ex_ <tftproot\win2003>
copy <Source dir>/i386/ntdetect.com <tftproot\win2003>

– Linux command:(使用Linux命令,以二进制方式,修改文件;当然也可以用UltraEdit等工具修改)
—- for windows 2003 i386
sed -i -e ‘s/NTLDR/W2K3L/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/wi2k3\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k3/gi’ setupldr.exe
mv startrom.n12 wi2k3.0
mv setupldr.exe W2K3L
mv NTDETECT.COM ntdetect.2k3
— for windows 2003 x64
sed -i -e ‘s/NTLDR/W2K4L/gi’ startrom.n12
sed -i -e ‘s/winnt\.sif/wi2k4\.sif/gi’ setupldr.exe
sed -i -e ‘s/ntdetect\.com/ntdetect\.2k4/gi’ setupldr.exe
mv startrom.n12 wi2k4.0
mv setupldr.exe W2K4L
mv NTDETECT.COM ntdetect.2k4

3. 在 e:\tftp目录下建立文件winnt.sif,内容如下(注意修改其中的IP为你服务器的IP; 并根据上面的步骤2,将Windows XP 与Windows 2003的对应winnt.sif文件, 分别改名为winxp.sif、wi2k3.sif):
* 此步骤,可以用Windows光盘内的Deploy工具,建立完整的自动应答文件;这里仅考虑最简单情况.

[data]
floppyless = “1”
msdosinitiated = “1”
; Needed for second stage
OriSrc=”http://zjwsk.blog.163.com/blog/\\192.168.5.21\RemInst\winxp\i386″
OriTyp = “4”
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = “/fastdetect”
; Needed for first stage
SetupSourceDevice = “\Device\LanmanRedirector\192.168.5.21\RemInst\winxp”

[RemoteInstall]
; Avoid automatic format/repartition
Repartition = No
UseWholeDisk = No

[UserData]
ComputerName = *
ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

3. 配置网络匿名共享
目标机启动了WINXP的安装程序后,XP的安装文件需要通过网络共享的方式拷贝过去。这时需要配置你的WINDOWS机器开启匿名共享。步骤如下:

3.1  将e:\tftp目录共享,共享名为reminst。 注意共享权限中加入everyone,如果为NTFS分区,同时还要注意此目录的读写权限中也加入everyone;
3.2 启动guest用户,并将guest用户密码置空;
3.3 从控制面板->管理工具进入“本地安全策略”,在本地策略->用户权利指派下找到“拒绝从网络访问这台计算机”(Deny access to this computer from the network),从中删除guest用户;
3.4 从控制面板->管理工具进入“本地安全策略”,在本地策略->安全选项下找到“让每个人权限应用于匿名用户”(Network access: Let Everyone permissions apply to anonymous users),将其启用;
3.5 从控制面板->管理工具进入“本地安全策略”,在本地策略->安全选项下找到“可匿名访问的共享”(Network access: Shares that can be accessed anonymously),在其中加入reminst;

4. 配置Binl Server
4.1 从http://oss.netfarm.it/guides 下载文件ris-linux-0.X.tar.gz,解压到目录e:\tftp\ris-linux-0.X,此程序的作用是搜索适合目标机的网卡驱动程序并发送给目标机。

4.2 从http://www.python.org/ftp/python 下载软件包 python-2.5.x.msi,然后安装。此软件包用来支持python语言,因为ris-linux-0.x是用python语言和C语言写的。

4.3 从http://ris-autoinst.googlecode.com/files/ 下载软件包 ris-autoinst-0.6.1.tar.gz(这是一个完整的Linux下实现RIS的解决方案,过程不在本例讨论之列,仅利用其收集的网卡驱动 程序;当然你也可自己添加你当前环境的网卡驱动,主要是两个文件xxx.inf、xxx.sys),解压之后,将其内部的 winxpsys.tar.gz、winxpinf.tar.gz 解压至e:\tftp\winxp\i386目录内;
网络上说的要将WindowsXP光盘内的drivers.cab解压至 winxp\i386目录内,充当网卡驱动文件的做法,我的虚拟机环境内没有成功;

进入命令提示符模式,运行:
cd e:\tftp\ris-linux-0.x
.\infparser.py e:\tftp\winxp\i386
.\binlsrv.exe

*  binlsrv.exe会一直运行,不要关闭它。

—————-
【以在Windows 2003上加载SCSI驱动为例子】 —http://technet.microsoft.com/en-us/library/cc720099(WS.10).aspx

1. 在RIS镜像文件夹中加上下面的FOLDER
–%RIS_IMAGE_FOLDER%\$OEM$
–%RIS_IMAGE_FOLDER%\$OEM$\TEXTMODE

2. 把你要添加的驱动文件COPY到TEXTMODE下,修改你添加的驱动文件 txtsetup.OEM , 里面[DISKS]一段, 修改里面的值定向到新的驱动源.
[Disks]
# d1 = “Adaptec AAR-1420SA Serial ATA HostRAID Driver for Windows x64 Edition (EM64T/AMD64)”, \hraidsk1, \amd64
d1 = “Adaptec AAR-1420SA Serial ATA HostRAID Driver for Windows x64 Edition (EM64T/AMD64)”, \, \

3. 将驱动文件copy至对应的I386目录;

4. 修改winnt.sif文件加入MASS STORAGE驱动:
[Unattended]
OemPnPDriversPath=”\\192.168.1.2\RemInst\Win2003\$OEM$\textmode”
DUDisable=no
DriverSigningPolicy=ignore

[MassStorageDrivers]
“Adaptec HOSTRAID driver for Windows XP/2003 x64 Edition”=”OEM”
◆此处的名字,copy自RAID卡驱动文件中的txtsetup.oem内的SCSI字段里面,如: s2 = “Adaptec HOSTRAID driver for Windows XP/2003 x64 Edition”

[OEMBootFiles]
*.cat
*.inf
*.sys
*.oem

——————–
【怎样为RIS安装添加第三方网卡驱动】 —http://www.intel.com/support/network/sb/CS-028856.htm#XP

Note: 此步驟中一定要注意LAN driver 必須是For RIS driver,存在于NIC drivers当中RIS 文件夹里 ,README.TXT 文件当中一般会有说明如何增加NIC RIS 驱动, 。

Add client end driver in PXE SERVER.
1.Create an [IMAGE_ROOT]\$oem$\$1\Drivers\ directory if one does not already exist.
2.At above “Drivers” directory, create three file folders “NIC”,”AUDIO”,”VGA”,and “MODEM”.
3.Copy clients’LAN, Audio, VGA and Modem drivers to the above related folders.
4.Copy all .SYS files to the [IMAGE_ROOT]\i386 directory. Do NOT copy the .INF files to this directory.
*5.Copy The NIC RIS/PXE/WINPE Driver’s .NIF file to the [IMAGE_ROOT]\i386 directory.
6.Make the following changes to the .SIF file that is used for this image installation.
(located in the [IMAGE_ROOT]\I386\Templates directory):
[Unattended]
OemPreinstall = yes
OemPnPDriversPath = Drivers\NIC;Drivers\Video
7.Use ris-linux-0.4.tar.gz to Create “BinlSrv”

◆相关说明:
RIS安装使用到的自动应答文件的参数说明,不用在网络上郁闷的搜索了。在你的Windows XP光盘内X:\SUPPORT\TOOLS\DEPLOY.CAB,有事无巨细的说明!
TFTPD32:http://tftpd32.jounin.net/tftpd32_download.html
File pxelinux.0 in software syslinux: http://linux2.onlinedown.net/down/syslinux-3.86.tar.zip
ris-linux-0.X.tar.gz: http://oss.netfarm.it/guides
python-2.5.x: http://www.python.org/ftp/python