首页 > 网站 > WEB开发 > 正文

利用EJS查找可用的Google搜索服务器IP,并缓存入系统Hosts文件内(改进版)

2024-04-27 14:12:32
字体:
来源:转载
供稿:网友

利用EJS查找可用的Google搜索服务器ip,并缓存入系统Hosts文件内(改进版)

此博客为9925.org的镜像,登录9925.org可以查看到最新博文。

原文出处:http://ily.so/AfA3yu

EJS脚本运行环境下载:下载地址

由于http对象底层Socket的连接功能未提供超时机制,所以即使为http对象设置了Timeout属性在某些情况下也会等待20秒左右才能连接超时。

为了解决这个问题,我们采用Socket提供的异步连接方法测试服务器是否开通80端口。

第一步:新建一个名为“Socket.ejs”的脚本文件(下一个版本将集成到lib运行库目录内),键入下面代码:

/*指定 Socket 类的实例可以使用的寻址方案。AppleTalk AppleTalk 地址。Atm 本机 ATM 服务地址。Banyan Banyan 地址。Ccitt CCITT 协议(如 X.25)的地址。Chaos MIT CHAOS 协议的地址。Cluster Microsoft 群集产品的地址。DataKit Datakit 协议的地址。DataLink 直接数据链接接口地址。DecNet DECnet 地址。Ecma 欧洲计算机制造商协会 (ECMA) 地址。Firefox FireFox 地址。HyperChannel NSC Hyperchannel 地址。Ieee12844 IEEE 1284.4 工作组地址。ImpLink ARPANET IMP 地址。InterNetwork IP 版本 4 的地址。InterNetworkV6 IP 版本 6 的地址。Ipx IPX 或 SPX 地址。Irda IrDA 地址。Iso ISO 协议的地址。Lat LAT 地址。Max MAX 地址。NetBios NetBios 地址。NetworkDesigners 支持网络设计器 OSI 网关的协议的地址。NS Xerox NS 协议的地址。Osi OSI 协议的地址。Pup PUP 协议的地址。Sna IBM SNA 地址。Unix Unix 本地到主机地址。Unknown 未知的地址族。Unspecified 未指定的地址族。VoiceView VoiceView 地址。*/var AddressFamily = System.Net.Sockets.AddressFamily;/*指定 Socket 类的实例表示的套接字类型。Dgram 支持数据报,即最大长度固定(通常很小)的无连接、不可靠消息。 消息可能会丢失或重复并可能在到达时不按顺序排列。 Dgram 类型的 Socket 在发送和接收数据之前不需要任何连接,并且可以与多个对方主机进行通信。 Dgram 使用数据报协议 (Udp) 和 InterNetworkAddressFamily。Raw 支持对基础传输协议的访问。 通过使用 SocketTypeRaw,可以使用 Internet 控制消息协议 (Icmp) 和 Internet 组管理协议 (Igmp) 这样的协议来进行通信。 在发送时,您的应用程序必须提供完整的 IP 标头。 所接收的数据报在返回时会保持其 IP 标头和选项不变。Rdm 支持无连接、面向消息、以可靠方式发送的消息,并保留数据中的消息边界。 RDM(以可靠方式发送的消息)消息会依次到达,不会重复。 此外,如果消息丢失,将会通知发送方。 如果使用 Rdm 初始化 Socket,则在发送和接收数据之前无需建立远程主机连接。 利用 Rdm,您可以与多个对方主机进行通信。Seqpacket 在网络上提供排序字节流的面向连接且可靠的双向传输。 Seqpacket 不重复数据,它在数据流中保留边界。 Seqpacket 类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。Stream 支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。 此类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。 Stream 使用传输控制协议 (Tcp) PRotocolType 和 InterNetworkAddressFamily。Unknown 指定未知的 Socket 类型。*/var SocketType = System.Net.Sockets.SocketType;/*指定 Socket 类支持的协议。Ggp 网关到网关协议。Icmp 网际消息控制协议。IcmpV6 用于 IPv6 的 Internet 控制消息协议。Idp Internet 数据报协议。Igmp 网际组管理协议。IP 网际协议。IPSecAuthenticationHeader IPv6 身份验证头。 有关详细信息,请参见位于 http://www.ietf.org 中的 RFC 2292 的 2.2.1 节。IPSecEncapsulatingSecurityPayload IPv6 封装式安全措施负载头。IPv4 Internet 协议版本 4。IPv6 Internet 协议版本 6 (IPv6)。IPv6DestinationOptions IPv6 目标选项头。IPv6FragmentHeader IPv6 片段头。IPv6HopByHopOptions IPv6 逐跳选项头。IPv6NoNextHeader IPv6 No Next 头。IPv6RoutingHeader IPv6 路由头。Ipx Internet 数据包交换协议。ND 网络磁盘协议(非正式)。Pup PARC 通用数据包协议。Raw 原始 IP 数据包协议。Spx 顺序包交换协议。SpxII 顺序包交换协议第 2 版。Tcp 传输控制协议。Udp 用户数据报协议。Unknown 未知协议。Unspecified 未指定的协议。*/var ProtocolType = System.Net.Sockets.ProtocolType;/*使用指定的地址族、套接字类型和协议初始化 Socket 类的新实例。addressFamily:AddressFamily 值之一。类型:AddressFamilysocketType:SocketType 值之一。类型:SocketTypeprotocolType:ProtocolType 值之一。类型:ProtocolType*/function Socket(addressFamily, socketType, protocolType){if(typeof(addressFamily) != "number"){throw new ArgumentException("addressFamily参数不能为空,并且必须为Number。");}if(typeof(socketType) != "number"){throw new ArgumentException("socketType参数不能为空,并且必须为Number。");}if(typeof(protocolType) != "number"){throw new ArgumentException("protocolType参数不能为空,并且必须为Number。");}this.author = "Easton";this.url = "http://www.9925.org";this.version = "1.0.0.0";this.baSEObject = new System.Net.Sockets.Socket(addressFamily, socketType, protocolType);}

第二步:修改上一篇文章内提供的脚本,新增检测80端口是否启用的功能。

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{//检测80端口是否开通var result = socket.baseObject.BeginConnect(temp, 80, null, null);var success = result.AsyncWaitHandle.WaitOne(2000, true);if (!success){console.error(url + "连接80端口超时。");continue;}}finally{socket.baseObject.Close();}

完整的脚本

clear();console.info("/**************************版权声明**************************/");console.info("/* */");console.info("/*功能描述:查找可用的Google服务器,并将其缓存入系统DNS。 */");console.info("/*脚本作者:Easton */");console.info("/*联系邮箱:easton@xiangyadao.com */");console.info("/*完成时间:2015年2月27日 */");console.info("/* */");console.info("/************************************************************/");var hostsMarkBegin = "#EJS GOOGLE HOSTS BEGIN";var hostsMarkEnd = "#EJS GOOGLE HOSTS END";var googleDomains = ["google.com", "www.google.com", "m.google.com", "scholar.google.com", "translate.google.com", "books.google.com", "appengine.google.com", "maps.google.com", "news.google.com", "images.google.com", "finance.google.com", "history.google.com", "drive.google.com", "docs.google.com", "plus.google.com", "play.google.com", "calendar.google.com", "domains.google.com", "code.google.com", "googlecode.com", "v8.googlecode.com", "gyp.googlecode.com", "cloud.google.com", "earth.google.com", "places.google.com", "adWords.google.com", "sites.google.com", "keep.google.com", "support.google.com", "developers.google.com", "spreadsheets.google.com", "video.google.com", "photos.google.com", "wallet.google.com", "groups.google.com", "Gmail.com", "www.gmail.com", "m.gmail.com", "m.googlemail.com", "mail-attachment.googleusercontent.com", "www.Chrome.com", "developer.chrome.com", "chrome.google.com", "picasa.google.com", "talkgadget.google.com", "toolbar.google.com", "tools.google.com", "inbox.google.com", "apis.google.com", "www.googleapis.com", "android.googleapis.com", "play.googleapis.com", "plus.googleapis.com", "Ajax.googleapis.com", "chart.googleapis.com", "fonts.googleapis.com", "redirector-bigcache.googleapis.com", "translate.googleapis.com", "maps.googleapis.com", "content.googleapis.com", "storage.googleapis.com", "commondatastorage.googleapis.com", "static.panoramio.com.storage.googleapis.com", "www.gstatic.com", "ssl.gstatic.com", "csi.gstatic.com", "maps.gstatic.com", "fonts.gstatic.com", "encrypted-tbn0.gstatic.com", "encrypted-tbn1.gstatic.com", "encrypted-tbn2.gstatic.com", "encrypted-tbn3.gstatic.com", "encrypted-tbn4.gstatic.com", "encrypted-tbn5.gstatic.com", "encrypted-tbn6.gstatic.com", "g0.gstatic.com", "g1.gstatic.com", "g2.gstatic.com", "g3.gstatic.com", "g4.gstatic.com", "g5.gstatic.com", "g6.gstatic.com", "g7.gstatic.com", "mt0.gstatic.com", "mt1.gstatic.com", "mt2.gstatic.com", "mt3.gstatic.com", "mt4.gstatic.com", "mt5.gstatic.com", "mt6.gstatic.com", "mt7.gstatic.com", "t0.gstatic.com", "t1.gstatic.com", "t2.gstatic.com", "t3.gstatic.com", "t4.gstatic.com", "t5.gstatic.com", "t6.gstatic.com", "t7.gstatic.com", "1-ps.googleusercontent.com", "2-ps.googleusercontent.com", "3-ps.googleusercontent.com", "4-ps.googleusercontent.com", "www.googleusercontent.com", "oauth.googleusercontent.com", "feedback.googleusercontent.com", "translate.googleusercontent.com", "themes.googleusercontent.com", "webcache.googleusercontent.com", "books.googleusercontent.com", "video.googleusercontent.com", "music-onebox.googleusercontent.com", "music.googleusercontent.com", "blogger.googleusercontent.com", "newsstand.googleusercontent.com", "producer.googleusercontent.com", "code-opensocial.googleusercontent.com", "spreadsheets-opensocial.googleusercontent.com", "www-calENDar-opensocial.googleusercontent.com", "www-fc-opensocial.googleusercontent.com", "www-focus-opensocial.googleusercontent.com", "www-gm-opensocial.googleusercontent.com", "www-kix-opensocial.googleusercontent.com", "www-open-opensocial.googleusercontent.com", "www-opensocial.googleusercontent.com", "www-opensocial-sandbox.googleusercontent.com", "www-oz-opensocial.googleusercontent.com", "a-oz-opensocial.googleusercontent.com", "0-open-opensocial.googleusercontent.com", "1-open-opensocial.googleusercontent.com", "2-open-opensocial.googleusercontent.com", "3-open-opensocial.googleusercontent.com", "0-focus-opensocial.googleusercontent.com", "1-focus-opensocial.googleusercontent.com", "2-focus-opensocial.googleusercontent.com", "3-focus-opensocial.googleusercontent.com", "doc-00-7o-docs.googleusercontent.com", "doc-01-7o-docs.googleusercontent.com", "doc-02-7o-docs.googleusercontent.com", "doc-03-7o-docs.googleusercontent.com", "doc-04-7o-docs.googleusercontent.com", "doc-05-7o-docs.googleusercontent.com", "doc-06-7o-docs.googleusercontent.com", "doc-07-7o-docs.googleusercontent.com", "doc-08-7o-docs.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表