返回列表 发帖

[网络连接] [代码征集]网站屏蔽批处理

大家都知道,利用hosts文件,可以达到屏蔽一些不受欢迎的网站.

代码要求:
1、能够添加需屏蔽的网站;
2、能够解除相应屏蔽的网站(最好可以显示已屏蔽的网站);

代码尽量简洁且配有解说;大家见仁见智,集思广益...

版主好厉害哦!
学习学习~

学多了点Findstr的正则表达式~

TOP

@echo off&setlocal enabledelayedexpansion
set /p 屏蔽=要屏蔽的网址:
set /p 解除=要解除的屏蔽:
echo 127.0.0.1 !屏蔽!>"%Windir%\System32\drivers\etc\hosts"
if defined 解除 findstr /vxrc:"\<[0-9.]*\>\<!解除!\>" "%Windir%\System32\drivers\etc\hosts">host.tmp
move /y host.tmp "%Windir%\System32\drivers\etc\hosts"COPY
1

评分人数

TOP

好老的贴啊~
我自己写的:
http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html

代码:
::61
@echo off&Setlocal enabledelayedexpansion
title Hosts文件修改器&color 0A
mode con: cols=70 lines=30
chcp 936
:Win_Version
for /f "usebackq tokens=1,2,*" %%x in (`"reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" 2>nul"^|findstr /i ProductName`) do (
    set winversion=%%z
)
for /f "usebackq tokens=3*" %%a in (`"reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows" 2>nul"^|findstr /i CSDVersion`) do (
    set SP=%%a
)
:Welcome_Screen
title 主页&echo/&echo/
echo                 ┌────────┐                             
echo                 │Hosts文件修改器 │                             
echo                 │    GaryNg      │
echo                 └────────┘
echo/&echo         系统版本:!winversion!
echo                     Service Pack !SP:~2,1!
ping /n 4 127.1>nul 2>nul
:Permission_Test
title 权限确认&cls
echo/&echo/&echo/
echo                正在测试用户权限
echo                  ...请稍后...
mkdir %Windir%\test3141582653 >nul 2>nul
if not exist %Windir%\test3141582653 (
    cls
    echo/&echo/&echo/
    echo                请以管理员权限运行
    echo 或者退出后右键点击我,选"Run As Administrator"
    echo                  按任意键退出
    pause>nul
    exit
) else (
rd /q %Windir%\test3141582653 >nul 2>nul
)
cls
:Write_Hosts_If_Not_Exist
if not exist %Windir%\System32\drivers\etc\hosts (
echo #Hosts文件修改器Rewrote This File >%Windir%\System32\drivers\etc\hosts
echo 127.0.0.1    localhost >>%Windir%\System32\drivers\etc\hosts
)
type %Windir%\System32\drivers\etc\hosts|find /i "localhost"||(
echo #Hosts文件修改器Rewrote This File >%Windir%\System32\drivers\etc\hosts
echo 127.0.0.1    localhost >>%Windir%\System32\drivers\etc\hosts
)
:Auto_Update
goto Update_Hosts
:Menu
title 功能列表&cls&echo/&echo/&echo/
echo                          功能列表
echo                 ┌─────────────┐
echo                 │   A.显示hosts文件        │
echo                 │   B.添加新屏蔽网址       │
echo                 │   C.去掉某个已屏蔽的网址 │
echo                 │   D.Hosts文件介绍        │
echo                 │   E.检查更新             │         
echo                 │   F.备份Hosts文件        │
echo                 │   G.还原Hosts文件        │
echo                 │   H.报告虫虫(Bug)      │
echo                 │   Q.退出                 │
echo                 └─────────────┘
set choice=
set /p choice=[请输入选择...]
if /i "%choice%"=="a" goto List_Hosts
if /i "%choice%"=="b" goto Add_Hosts
if /i "%choice%"=="c" goto Del_Hosts
if /i "%choice%"=="d" goto Info_Hosts
if /i "%choice%"=="e" goto Update_Hosts
if /i "%choice%"=="f" goto Backup_Hosts
if /i "%choice%"=="g" goto Restore_Hosts
if /i "%choice%"=="h" goto Report_Hosts_Bug
if /i "%choice%"=="q" goto Exit
if /i "%choice%"=="" (
    echo                       无效的选项,请重新输入
    ping /n 3 127.1>nul 2>nul
    cls&goto Menu
)
echo                       无效的选项,请重新输入
ping /n 3 127.1>nul 2>nul
cls&goto Menu
:List_Hosts
set block=0
set jump=0
set localhost=0
title 显示hosts文件&cls&echo/&echo/&echo/
echo/&echo    IP          Hosts
for /f "tokens=1,2 eol=#" %%a in ('type %Windir%\System32\drivers\etc\hosts') do (
if /i %%b==localhost (
echo %%a   %%b     这是localhost,不能删除!
set /a localhost+=1
)
if /i "%%b" NEQ "localhost" if %%a==127.0.0.1 (
echo %%a   %%b     此网站已被屏蔽
set /a block+=1
) else (
echo %%a   %%b     此网站将跳转到%%a
set /a jump+=1
)
)
set /a linksum=!localhost!+!block!+!jump!
echo/&echo 共有!linksum!条地址在Hosts文件中
echo/&echo !block!个被屏蔽
echo/&echo !jump!个将跳转到其他地址
echo 按任意键返回主页&pause>nul&cls&goto Menu
:Add_Hosts
title 添加新网址-功能列表&cls&echo/&echo/&echo/
echo                        功能列表
echo                 ┌───────────┐
echo                 │   E.屏蔽某个网址     │
echo                 │   Q.返回             │
echo                 └───────────┘
set choice=
set /p choice=[请输入选择...]
if /i "%choice%"=="e" goto Add_Block_Hosts
if /i "%choice%"=="q" goto Menu
if /i "%choice%"=="" (
    echo                       无效的选项,请重新输入
    ping /n 3 127.1>nul 2>nul
    cls&goto Add_Hosts
)
echo                       无效的选项,请重新输入
ping /n 2 127.1>nul 2>nul
cls&goto Add_Hosts
:Add_Block_Hosts
title 屏蔽某个网址&cls&echo/&echo/&echo/
echo 请输入要屏蔽的网址(不带http://)
echo 例如:
echo www.google.com
echo www.baidu.com
set /p blocklink=[请输入网址...]
type %Windir%\System32\drivers\etc\hosts|find /i "%blocklink%" && (echo 该地址已经存在!& ping /n 3 127.1>nul 2>nul&cls&goto Add_Block_Hosts)
echo/&echo 正在添加...
echo 127.0.0.1    %blocklink% >>%Windir%\System32\drivers\etc\hosts
echo/&echo 完成!
echo/&echo 按Y键继续添加屏蔽网址,其他键返回主页
set choice=
set /p choice=[请输入...]
if /i "%choice%"=="y" goto Add_Block_Hosts
cls&goto Menu
:Del_Hosts
setlocal
title 去掉某个网址&cls&echo/&echo/
set localhost=0
set hostnum=1
echo Hosts文件列表:
echo    IP             Hosts
for /f "eol=# tokens=1,2" %%c in ('type %windir%\System32\drivers\etc\hosts') do (
if /i "%%d" neq "localhost" (
echo !hostnum!^) %%c   %%d
set /a hostnum+=1
)
)
set /a hostnum-=1
if "!hostnum!" == "0" (
echo 你的Hosts文件没有地址啊!添加屏蔽网址吗?
set /p choice=[要=y,不要!=n]
if /i "!choice!"=="y" (
ping /n 3 127.1>nul 2>nul&cls
goto Add_Hosts
) else (
ping /n 3 127.1>nul 2>nul&cls
goto Menu
)
)
echo 请问要删除那一行?
set /p delline=[请输入,上限为%hostnum%...]
if /i "%delline%!" gtr "%hostnum%" (
echo 没有此行!请重新输入~
ping /n 3 127.1>nul 2>nul&cls
endlocal&goto Del_Hosts
)
if /i "%delline%"=="0" (
echo 没有此行!请重新输入~
ping /n 3 127.1>nul 2>nul&cls
endlocal&goto Del_Hosts
)
if /i "%delline%"=="" (
echo 没有此行!请重新输入~
ping /n 3 127.1>nul 2>nul&cls
endlocal&goto Del_Hosts
)
for /f "delims=" %%e in ('find /c /v ""^<%windir%\System32\drivers\etc\hosts') do (
set totalline=%%e
)
set /a delline=!totalline!-!hostnum!+!delline!
(for /F "tokens=1* delims=:" %%f In ('findstr /n .* %windir%\System32\drivers\etc\hosts') do if !delline! NEQ %%f Echo %%g)>Temp
move Temp %windir%\System32\drivers\etc\hosts >nul 2>nul
echo/&echo                   操作成功!
echo/&echo      按Y键继续添加删除网址,其他键返回主页
set /p choice=[请输入...]
if /i "%choice%"=="y" goto Del_Hosts
goto Menu
:Info_Hosts
title Hosts文件介绍&cls&echo/&echo/
set infostr1=Hosts 文 件 中 存 放 的 是 一 些 网 站 主 机 的 域 名 和 其 对 应 的 IP 。 当 我 们 在 使 用 浏 览 器 浏 览 一 个 网 站 时 ,系 统 会 先 检 查 本 地 的 Hosts 表 文 件 , 其 中 是 否 已 经 有 相 应 的 域 名 与 IP 地 址 对 应 关 系 , 如 果 有 就 会 直 接 采 用 , 因 而 会 节 约 大 量 的 时 间 。
set infostr2=假 如 Hosts 表 文 件 的 某 个 域 名 与 IP 地 址 产 生 了 错 误 的 对 应 , 但 你 在 浏 览 器 中 输 入 这 个 域 名 试 图 打 开 其 对 应 的 网 页 时 , 就 会 出 现 打 不 开 的 情 况 。 根 据 此 原 理 , 我 们 可 以 通 过 修 改 Hosts 文 件 来 解 决 某 些 网 站 打 不 开 的 情 况 。 同 时 , 一 些 烦 人 的 网 站 ( 例 如 那 烦 人 的 广 告 ) 我 们 可 以 利 用 这 个 特 性 将 其 ‘ 屏 蔽 ’ 掉 , 只 要 添 加 这 个 网 站 并 将 其 对 应 的 IP 写 为 127 . 0 . 0 . 1 即 可 ~
set infostr3=本 程 序 运 用 了 Hosts 文 件 的 特 性 , 让 用 户 能 自 由 添 加 要 屏 蔽 的 网 站 , 备 份 Hosts 文 件 , 等 等 一 些 实 用 的 功 能 ~
echo/&set /p=       <nul
for %%h in (%infostr1%) do (
set /p=%%h<nul
ping /n 1 127.0.0.1>nul 2>nul
)
echo/&set /p=       <nul
for %%h in (%infostr2%) do (
set /p=%%h<nul
ping /n 1 127.0.0.1>nul 2>nul
)
echo/&set /p=       <nul
for %%h in (%infostr3%) do (
set /p=%%h<nul
ping /n 1 127.0.0.1>nul 2>nul
)
echo/&echo 按任意键回到主页&pause>nul&goto Menu
:Update_Hosts
title 检查更新&cls&echo/&echo/
:Del_Temp
if exist %temp%\Hosts_Update.vbs del /q %temp%\Hosts_Update.vbs
if exist %temp%\Hosts_Download.vbs del /q %temp%\Hosts_Download.vbs
if exist %temp%\版本标记.txt del /q %temp%\版本标记.txt
:Check_Ext
for /f %%z in ("%0") do (
if /i "%%~xz" == ".bat" (
set downloadlink=http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8.bat
) else (
set downloadlink=http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8.exe
)
)
set newver=no
echo                            ...请稍等...
call :Download_VBS_Code Hosts_Update.vbs http://dl.dropbox.com/u/43619472/%%%%E6%%%%89%%%%B9%%%%E5%%%%A4%%%%84%%%%E7%%%%90%%%%86/Hosts%%%%E6%%%%96%%%%87%%%%E4%%%%BB%%%%B6%%%%E4%%%%BF%%%%AE%%%%E6%%%%94%%%%B9%%%%E5%%%%99%%%%A8/Ver.txt 版本标记.txt
cscript //NoLogo /e:vbscript %temp%\Hosts_Update.vbs
set newver=未知
for /f %%i in (%temp%\版本标记.txt) do set newver=%%i
if "%newver%"=="未知" (
echo                              更新不成功
ping /n 3 127.0.0.1>nul 2>nul
cls
goto Menu
)
set /p nowver=<"%~0"
set "nowver=%nowver:~2%"
if "!newver!" gtr "!nowver!" (
goto Do_Update
) else (
echo                      版本最新,不需要更新
ping /n 3 127.0.0.1>nul 2>nul
cls&goto Menu
)
call :Download_VBS_Code Website_Visit.vbs http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html _~TeMp__Temp.T.e.M.p.Tmp
cscript //NoLogo /e:vbscript %temp%\Website_Visit.vbs
del /q %temp%\_~TeMp__Temp.T.e.M.p.Tmp
:Do_Update
title 发现新版本&cls&echo/&echo/
echo/&echo         当前版本:  %nowver%
echo/&echo         最新版本:  %newver%
echo/&echo           发现新版本,是否更新?
echo/&echo         y 开始更新  其他键返回主页
set /p update=[请输入...]
if /i "%update%"=="y" (
title 下载更新&cls&echo/&echo/
echo                    正在下载更新
echo                    ...请稍后...
call :Download_VBS_Code Hosts_Download.vbs %downloadlink% hosts文件修改器_new.bat
cscript //NoLogo /e:vbscript %temp%\Hosts_Download.vbs
(for /l %%a in (1 1 1) do set /p test=)<%temp%\hosts文件修改器_new.bat
set "test=%test:~2%"
if /i "%test%" neq "" (
echo                  更新不成功
ping /n 3 127.0.0.1>nul 2>nul
cls
goto Menu
)
echo @echo off>Hosts_Temp.bat
echo mode con: cols=70 lines=30 >>Hosts_Temp.bat
echo title 下载更新^&cls^&echo/^&echo/ >>Hosts_Temp.bat
echo echo             ...正在更新... >>Hosts_Temp.bat
echo ping /n 3 127.0.0.1^>nul 2^>nul >>Hosts_Temp.bat
echo copy /y %temp%\hosts文件修改器_new.bat Hosts文件修改器.bat ^>nul 2^>nul >>Hosts_Temp.bat
echo if "%%errorlevel%%" neq "0"  echo 更新不成功 >>Hosts_Temp.bat
echo pause >>Hosts_Temp.bat
echo del /q %%0 >>Hosts_Temp.bat
echo exit >>Hosts_Temp.bat
cls
echo     程序即将退出,并开启另一个窗口,以更新文件!
ping /n 3 127.0.0.1>nul 2>nul
Hosts_Temp.bat
exit
) else (
ping /n 3 127.0.0.1>nul 2>nul
cls&goto Menu
)
:Backup_Hosts
if not exist %windir%\System32\drivers\etc\Hosts_备份 (
md %windir%\System32\drivers\etc\Hosts_备份
)
for /f "tokens=1" %%i in ('echo %date%') do (
set da=%%i
set da=!da:/=-!
echo !da!
)
title 备份Hosts文件&cls&echo/&echo/
echo                      正在备份
echo                    ...请稍后...
copy /y %windir%\System32\drivers\etc\hosts %windir%\System32\drivers\etc\Hosts_备份\!da!_Hosts备份.txt
cls&echo/&echo/
echo                   ...备份完毕...
ping /n 3 127.0.0.1>nul 2>nul&cls&goto Menu
echo 按任意键返回主页&pause>nul&cls&goto Menu
:Restore_Hosts
title 还原Hosts文件&cls&echo/&echo/
set backupnum=0
if exist %temp%\restore_list_temp.txt (
del /q %temp%\restore_list_temp.txt
)
if exist %windir%\System32\drivers\etc\Hosts_备份 (
dir /b %windir%\System32\drivers\etc\Hosts_备份 >>%temp%\restore_list_temp.txt
for /f "delims=: tokens=1,2" %%i in ('findstr /n .* %temp%\restore_list_temp.txt') do (
set /a backupnum+=1
echo %%i^) %%j
)
)
echo!backupnum!个备份历史
echo 请问需要备份那个?
set /p backup=[请输入,下限为1,上限为!backupnum!]
if "!backup!" gtr "!backupnum!" (
echo 号码过大!请重新输入...
ping /n 3 127.0.0.1>nul 2>nul
goto Restore_Hosts
)
if "!backup!" lss "1" (
echo 号码不能小于1!请重新输入...
ping /n 3 127.0.0.1>nul 2>nul
goto Restore_Hosts
)
if "!backup!"=="" (
echo 请重新输入...
ping /n 3 127.0.0.1>nul 2>nul
goto Restore_Hosts
)
cls
echo/&echo/
echo                      正在还原
echo                    ...请稍后...
for /f "delims=: tokens=1,2" %%k in ('findstr /n .* %temp%\restore_list_temp.txt') do (
if /i "!backup!"=="%%k" (
copy /y "%windir%\System32\drivers\etc\Hosts_备份\%%l" %windir%\System32\drivers\etc\hosts >nul 2>nul
)
)
cls
echo/&echo/
echo                   ...成功还原...
echo/&echo 按任意键回到主页&pause>nul&goto Menu
:Report_Hosts_Bug
title 报告虫虫(Bug)&cls&echo/
echo/&echo              找到虫虫了(Bug)?快点,去报告吧!
echo/&echo            请记得写下你的操作系统Service Pack是多少
echo/&echo                    操作系统:!winversion!
echo/&echo                       Service Pack !SP:~2,1!
echo/&echo           打开网页后,滚到最底,点击"Add a comment",
echo/&echo          描述虫虫(Bug),写下操作系统和Service Pack号,
echo/&echo                      按下“发布评论”即可!
echo/&echo                    按任意键打开网页报告虫虫
pause>nul
start http://garyngzhongbo.blogspot.com/2011/10/hostsbat.html
cls&goto Menu
:Exit
title 退出&cls&echo/&echo/
set /p =程序将在             <nul
for /l %%a in (3 -1 1) do (
set /p =%%a秒内退出... <nul&ping -n 2 127.1 >nul
)
exit
:Download_VBS_Code
set sfilename=%1
set downloadlink1=%2
set tempfilename=%3
echo on error resume next>%temp%\%1
echo iLocal=LCase^("%temp%\%3"^) >>%temp%\%1
echo iRemote=LCase^("%2"^) >>%temp%\%1
echo Set xPost=createObject^("Microsoft.XMLHTTP"^) 'Set Post = CreateObject^("Msxml2.XMLHTTP"^) >>%temp%\%1
echo xPost.Open "GET",iRemote,0 >>%temp%\%1
echo xPost.Send^(^) >>%temp%\%1
echo set sGet=createObject^("ADODB.Stream"^) >>%temp%\%1
echo sGet.Mode=3 >>%temp%\%1
echo sGet.Type=1 >>%temp%\%1
echo sGet.Open^(^) >>%temp%\%1
echo sGet.Write xPost.ResponseBody >>%temp%\%1
echo sGet.SaveToFile iLocal,2 >>%temp%\%1
goto :eof
COPY

TOP

不上网?
那你做东西是不是要考虑周全先?是不是先?
我还没说你呢普通人
你以为每个人的系统都装在C盘啊,你要不要改好点啊,这些小错误我不想说出来,本应该能自己注意到的
Software is like sex: it's better when it's free..!

TOP

晕啊
somebody应该知道,批处理作用是有限的!发挥了他的作用就足够了,何必还要说他不能怎么怎么的呢?
利用host是“一种“方法
利用批处理就能简化我们利用这种方法的
这就达到了批处理的目的了,
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

回复 13# 的帖子

有同感,站在巨人的面前
我们就是那一 弱智

TOP

原帖由 somebody 于 2007-11-29 13:51 发表
哈哈~~~
我来揭示一下你们又犯了什么错误~~~
1. 加到hosts 里的网站,是不是所谓的病毒、木马网站,色情、垃圾网站先
      是的话,就一点机会都不要给,也就是说,不需要提供解除了

2. 哦,你们以为人家加个 ...


真是一山还有一山高,在下真是甘拜下风。。。。

按楼上的说法,最好不要上网,因为没有任何东西能彻底的预防病毒,
    就好象一个人,怕噎死而不敢喝水一样,又好像认为吃过了早饭就不用吃晚饭了一样,因为反正还是会饿的!

[ 本帖最后由 随风 于 2007-11-29 16:01 编辑 ]
技术问题请到论坛发帖求助!

TOP

哈哈~~~
我来揭示一下你们又犯了什么错误~~~
1. 加到hosts 里的网站,是不是所谓的病毒、木马网站,色情、垃圾网站先
      是的话,就一点机会都不要给,也就是说,不需要提供解除了

2. 哦,你们以为人家加个屏蔽网站就要这么辛苦吖,加一个就要用那个批处理吖
      想想整个网络有多少个网站先,加这些东西自然是到各安全论坛里去要
      几千上万个屏蔽网站自然是别人帮你收集,你拿来用,靠你一个人,傻!
3.
@echo off
attrib -r %windir%\system32\drivers\etc\hosts && notepad.exe %windir%\system32\drivers\etc\hosts
echo 编辑好hosts后保存,保存好后就在CMD窗口按回车即可
pause>nul
attrib +r %windir%\system32\drivers\etc\hostsCOPY
4. 其实若中毒的话,人家要搞你的hosts,一样可以把你的hosts 删掉,只读又如何,人家改不了你的hosts就删掉,然后自己建一个hosts,并且这个hosts是你很难删掉的,牛吧
Software is like sex: it's better when it's free..!

TOP

已经更新,这已经是最大努力了,
稍微作了些优化,和出错判断。
技术问题请到论坛发帖求助!

TOP

代码似乎还有点点问题,我解除屏蔽的时候,似乎解除不了啊

还有个问题,代码看起来似乎有点乱,排版不是很好看(呵呵,鸡蛋里挑骨头了,因为既然是代码征集,就是拿的出手的精品中的精品)

TOP

哈哈 。。
那我就没办法了,除了26个字母,其它的我统统不认识。哈哈哈哈。。。。。
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2007-11-26 15:06 发表
你是说的 这个 “title 网址 屏蔽/解除屏蔽”  吗?

里面的标签,如:jiec,:quan啊

TOP

回复 6# 的帖子

你是说的 这个 “title 网址 屏蔽/解除屏蔽”  吗?
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2007-11-25 23:22 发表
::知道这个原理就好办了。
::    但又要人性化,又要简洁,只怕有点难度。。。。
::         哈哈…… 代码 N 长…………
::@echo off&color 0f&title 网址 屏蔽/解除屏蔽
:: by 小楼一夜听春雨 2007-11-25
:lo ...


不错啊,加分鼓励.不过提点建议,标签或者封装的"函数"取名的时候最好是用英文好些,用中文的话,因为大多人采取的是拼音的方式,而且是简写的,所以到时可能会忘记标签原来的意义...

TOP

返回列表