无忧启动论坛

标题: PING不通内网指定IP,不让其访问指定域名(命令行) [打印本页]

作者: 2012huguoliang    时间: 2024-7-8 11:21
标题: PING不通内网指定IP,不让其访问指定域名(命令行)
本帖最后由 2012huguoliang 于 2024-7-8 18:35 编辑

如题,我现在有个这样的需求:

我只想这些域名(可能是合集,或者是通配符*.qq.com这种形式,不行就多写几条)在我内网(ping内网服务器)的情况下访问,不在内网时,让这些域名不能访问。

我现在能想到的是,先ping内网服务器,能ping通不做任何修改,不能ping通,则执行echo 127.0.01 *.qq.com >%windows%\system\etc\hosts,写入hosts文件劫持。恢复内网则删除这些劫持hosts。
我要做的是其实是我想公司所有电脑在上班的时候(肯定是连了公司路由DHCP)才访问这些网站,不在公司上班的时候不访问这些网站(hosts劫持)。

这样是不是有其他缺陷,或者哪位大佬给我个示例,不胜赶紧。

来,我自己写好了,给大伙看看,哈哈。
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("%~nx0"^&" h",0)^&(window.close) && exit
::隐藏执行begin后全部内容
:begin
@fltmc >nul || mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~f0","%*",,"runas",1)(window.close) && exit /b
@attrib -R -S C:\windows\system32\drivers\etc\hosts
@cd C:\windows\system32\drivers\etc\
@if not exist hostsbak @copy /y hosts hostsbak
::判断是否在内网
@echo off
ping 192.168.100.66 >nul 2>nul&&goto pingok||goto pingnook

:pingok
::在内网
rename hosts hosts1
rename hostsbak hosts
del /q hosts1
copy /y hosts hostsbak
@goto end

:pingnook
::非内网
echo 127.0.0.1 exmail.qq.com >> %SystemRoot%\System32\drivers\etc\hosts
echo 127.0.0.1 imap.exmail.qq.com >> %SystemRoot%\System32\drivers\etc\hosts
echo 127.0.0.1 smtp.exmail.qq.com >> %SystemRoot%\System32\drivers\etc\hosts
echo 127.0.0.1 pop.exmail.qq.com >> %SystemRoot%\System32\drivers\etc\hosts
@goto end

:end
::复制本身到system32
cd /d "%~dp0"
copy "%~nx0" "%systemroot%\system32\"
::加入到开机启动
@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\netexmail.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "c:\windows\system32\netexmail.bat" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "c:\windows\system32\" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs
exit





作者: 2011bigstern    时间: 2024-7-8 11:25
在服务器防火墙上做源地址限制呗。
作者: guies    时间: 2024-7-8 12:07
自已架設DNS服務器,
主要的設內網的DNS IP,
次要的設外網的DNS IP,
這樣在內網自然會用內網DNS優先,在其它地方時,
因為主要的DNS連不上,自然會用次要的DNS。
作者: 1G空间100元    时间: 2024-7-8 12:59
楼上正解 在内网路由器上指定内网使用的内网的DNS
将你需要的域名内网解析为内网IP 其他域名代理解析出去就可以了
作者: 1G空间100元    时间: 2024-7-8 13:08
可用Acrylic DNS这个软件  任意域名在内网做虚拟解析
其他域名用外网的DNS代理解析
然后内网的电脑DNS设置为这个Acrylic DNS所在的电脑的内网IP就可以了
既不影响外网的域名解析 还可以虚拟任意域名解析 任意后缀 包含不存在的后缀
这个软件虚拟解析权限大于外网代理解析 比如qq.com你这个软件做了虚拟解析到内网IP 就相当于劫持了解析
这个软件也支持泛域名解析
作者: BEIKING    时间: 2024-7-8 14:55
hosts 不支持通配符域名吧

作者: 2012huguoliang    时间: 2024-7-8 14:58
BEIKING 发表于 2024-7-8 14:55
hosts 不支持通配符域名吧

嗯 不支持 那就多条 或者说替代Hosts文件,这样更简单
作者: 红动中国    时间: 2024-7-8 15:05
这个方法好,谢谢分享
作者: BEIKING    时间: 2024-7-8 16:17
BEIKING 发表于 2024-7-8 14:55
hosts 不支持通配符域名吧

如果是这需求,我有脚本。
晚点给你

作者: 2012huguoliang    时间: 2024-7-8 16:39
BEIKING 发表于 2024-7-8 16:17
如果是这需求,我有脚本。
晚点给你

老大 帮忙写下  我觉得可以改进下

先备份下源hosts,命名位hostsbak

然后判断是否内网,如果是内网,则在hosts后面追加劫持。如果是外网,则将现有hosts改名hostsx,将备份的hostsbak改名位hosts。

这样更完美!
作者: BEIKING    时间: 2024-7-8 21:22
  1. @echo off
  2. if /i "%UserName%" == "SYSTEM" (Set PE=1&Goto GotAdmin) else (reg query "HKLM\SYSTEM\ControlSet001\Control\MiniNT" 1>nul 2>nul&&(Set PE=1&Goto GotAdmin))
  3. :BatchGotAdmin
  4. Set "_Args=%* "
  5. if `%1` neq `` Set "_Args=%_Args:"=""%"
  6. if exist %WinDir%\System32\fltMC.exe fltMC 1>nul 2>nul||mshta VBScript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c """"%~f0"" %_Args%""",,"runas",1)(Window.Close) 2>nul&&Exit /b

  7. :GotAdmin
  8. Title Hosts&if exist %WinDir%\System32\ureg.dll Mode 36,6 2>nul
  9. REM 环境检查
  10. find /? 1>nul 2>nul&&Set "findstr=find /i "||Set findstr=
  11. findstr /? 1>nul 2>nul&&Set "findstr=findstr /i /c:"
  12. if not defined findstr echo "找不到 find.exe 文件,按任意键退出 。。。"&Pause >nul&Exit /b
  13. ping /? 1>nul 2>nul||(echo "找不到 ping.exe 文件,按任意键退出 。。。"&Pause >nul&Exit /b)
  14. REM 配置参数
  15. Set "serIP=10.10.10.80" :: 用于检测是否为内网的服务器IP
  16. Set "mapIP=127.0.0.1"   :: 网址映射IP,通常是 127.0.0.1
  17. REM 检测是否为内网 (检测2次)
  18. echo.&echo.&echo      正在检测网络,请稍候。。。
  19. ping %SerIP% -n 1 1>nul 2>nul&&(Set lan=1&Goto MapIP)||Set lan=0
  20. ping %SerIP% -n 1 1>nul 2>nul&&Set lan=1||Set lan=0

  21. :MapIP
  22. if "%lan%" == "1" (
  23.     Call :HostsMap "+::%mapIP% www.qq.com"
  24.     Call :HostsMap "+::%mapIP% www.baidu.com"
  25.     Call :HostsMap "+::%mapIP% www.sina.com.cn"
  26.     Cls&Color 2f&echo.&echo.&echo      内网,已添加 Hosts 映射。
  27. ) else (
  28.     Call :HostsMap "-::%mapIP% www.qq.com"
  29.     Call :HostsMap "-::%mapIP% www.baidu.com"
  30.     Call :HostsMap "-::%mapIP% www.sina.com.cn"
  31.     Cls&Color cf&echo.&echo.&echo      非内网,已取消 Hosts 映射。
  32. )
  33. if exist %WinDir%\System32\timeout.exe (timeout /t 2 >nul) else if exist %WinDir%\System32\choice.exe (choice /t 2 /d y /n >nul) else ping 127.1 -n 2 >nul
  34. Exit /b

  35. :HostsMap :: 修改 Hosts 文件,调用格式 Call :HostsMap "+::127.0.0.1 app.drivereasy.com"
  36. Set "hosts=%SystemRoot%\System32\Drivers\etc\hosts"
  37. attrib -s -h -r "%hosts%" 1>nul 2>nul
  38. Setlocal EnableDelayedExpansion
  39. for %%a in (%*) do (
  40.     Set "param=%%~a"&if "!param:~1,2!" == "::" (
  41.         if "!param:~0,1!" == "+" (
  42.             %findstr%"!param:~3!" <"%hosts%" 1>nul 2>nul||>>"%hosts%" echo !param:~3!
  43.         ) else if "!param:~0,1!" == "-" (
  44.             %findstr%"!param:~3!" /v <"%hosts%" >"%hosts%.mod"
  45.             move /y "%hosts%.mod" "%hosts%" 1>nul 2>nul
  46.         )
  47.     )
  48. )
  49. Endlocal&Goto :eof
复制代码



作者: guong    时间: 2024-7-9 08:28
谢谢分享
作者: 2012huguoliang    时间: 2024-7-9 11:03
BEIKING 发表于 2024-7-8 21:22

比我的复杂点 我学习下
作者: 铿锵玫瑰    时间: 2024-7-9 17:01
这个方法好,谢谢分享!!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3