关于类似于电信弹出广告(push业务),使用ROS与简单web服务器实现。

本贴本人在其他论坛里发表过,在此再次与大家分享。 h=ko _/<    

在我们上网时,特别是使用ADSL上网时,你访问任何页面会弹出广告页面,电信运营上使用BRAS设备实现。现在介绍以下使用routeros如何实现。如果有哪位朋友有例如在自己的单位或内网中弹出页面下发通知等,可以一起琢磨琢磨。本人对routeros不是很熟悉,希望得到大家的完善。 \v([,tiW %    

思路:首先你内网中所有用户通过你的routeros上网,当首次访问网页的所有数据包通过你routeros时,我们包数据包重新定向到你web服务器,并且把目标地址转换成你web服务器的地址。此时访问任何网站的数据相当于访问你的web服务器,你在web服务器的网页上你弹出你的通知,然后把页面重定向到他刚开始要访问的页面。 IsB= G-s    

实施:routeros上 F2mW<R Eg{    

ip firewall mangle add chain=postrouting protocol=tcp dst-port=80 action=add-src-to-address-list address-list=src1 address-list-timeout=2m "A&HNk Rz    

命令解释:我们首先建立一条mangle,让访问HTTP的数据把源地址加在src1这个列表中,address-list-timeout意思是源地址存在与src1列表里的时间。 Z` k I6    

ip firewall nat add chain=dstnat protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.100.69 to-ports=80 src-address-list=!src1 CWM_J 9f    

命令解释:然后建立一条目标地址转换,把访问页面的数据的目标地址转换成你服务器的地址这里服务器的地址为192.168.100.69,src- address-list=!src1的意思为,只有对源地址没有在src1列表中的数据进行转换,意思也就是说,当你的内网机器再次访问网页时不再弹出页面。 |ea }+N    

两步就可以,当然前提是之前你内网机器能正常上网,且你web服务器能访问你内网。 dL >8|    

至于web服务器及web页面怎么写,可以问问搞ASP的。我这里有一简单的。 A\~ tr    

<HTML> W= $ , \D+    

f;%\4TH ?    

<head> BFM INq>    

<title></title><META HTTP-EQUIV="Pragma" CONTENT="no-cache"><META http-equiv="Content-Type" content="text/html;charset=gb2312"><meta http-equiv="Refresh" content="5; url=<%=GetUrl%>"> "A, -/~cBV    

</head> S% k](\7!    

8yn}|Y9F u    

<script language="JavaScript">function newwin(){var urlname;var win_attr;win_attr='toolbar=no,menubar=no,scrollbars=no,status=no,location=no,resizable=yes,fullscreen=no,directories=no,width=300,height=250,top=0,left=0 ';window.open('http://192.168.100.69/index.htm','ips_win0',win_attr); }</script> U qsX@jL!    

<%Function GetUrl() (u skVK>L    

On Error Resume Next @b"J F B|    

Dim strTemp ! [4<6/2gy    

If LCase(Request.ServerVariables("HTTPS"))="off" Then 'J "m`a8no    

strTemp = "http://" )Y @ mL/_    

Else _qQB .Dzo:    

strTemp = "http://" E8s&.:; +    

End If ;; g' C* _    

strTemp = strTemp & Request.ServerVariables("HTTP_HOST") ^&6'F E    

If Request.ServerVariables("SERVER_PORT") <> 80 Then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT") s j{ i    

strTemp = strTemp & Request.ServerVariables("URL") ^+20e3 ~Y    

If Trim(Request.QueryString) <> "" Then strTemp = strTemp & "?" & Trim(Request.QueryString) W bW@V_rr    

GetUrl = strTemp G 0 ;5I_D/    

End Function %> 5?? \[C^"}    

o<r|YRzQl    

<body text="#FFFFFF" bgcolor="#000000"><b><font size="5">尊敬的涉外花园用户: </body> sHSD` m Yq    

</font></b> - 1 Ok_h"    

<p><b><font size="5"> ~@wM[}ThP$    

<body text="#FFFFFF" bgcolor="#000000">您好! </body></font></b></p> xF4> G 0    

<p><b><font size="5"> [s pJ%AhV    

<body text="#FFFFFF" bgcolor="#000000">卖盒饭啦,电话1234567。 </body> VaIFE~>E &    

</font></b></p> ZF Ai9M    

<p><b><font size="5"> "5, tE P!    

<body text="#FFFFFF" bgcolor="#000000">不要使用电驴、BT等工具下载。谢谢!浏览器将在5秒后跳转到您要访问的页面。 Gz 9w1[t    

</font></b> </p> V{j >09u    

} : @s    

</body></html> K2u $1OKv    

我的页面没有弹出,只有转向。 d }" Dp    

4t0B_o "    

特别注意:根据实验,在做好ROS的地址转换后最好将web服务器设置自定义错误页面指向一个跳转页面。如建立一个redirect.htm ;%_fQ NF b    

<html> x! A.**    

<head> H |1owmbD    

<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> &3Q! 'pJJ    

<title>提示转向</title> ` Ei jy3>h    

</head> UUf-G 0/P    

<body> |- W7n'n    

<meta http-equiv="refresh" content="0;url=/admin/fabu.asp"> 0<8p G:BQ    

39|4 )1e    

</body> =,/0 8C s    

</html> |hp_<F9 .    

)然后将错误定向到该页面。这样的好处是在客户端首次访问外网网站时跳转到你WEB服务器的网站,而不会出现而后打开任何页面都进行跳转。