用Golang让自己的电脑自动登录“上网管理”系统

用Golang让自己的电脑自动登录

1.缘起

大天朝的网络一般都是只对某些人开放的。上行下效,同样的措施也作用在我们的教育网上。我想不出来,为什么很多领导的总有这样的恶趣味(如果做的到,他们恨不得监控下属的一言一行)。每次在我们的教育网内上网,都必须经过一个“上网管理”系统。当然必定是需要“实名登记”的。对于我这样的老老实实的已进化的猴子来说,这个显然很是多余,每次开机需要登录一次就很是不爽。那么就发挥主观能动性,让它自动化吧。

2.逻辑

程序逻辑非常简单,首先GET一个网页(不好意思选用了baidu.com),如果没有登录,“上网管理”系统会重定向到它的登录页面,我只需要搜索返回的内容中是否含有需要登录的信息,如果需要登录,则POST一个帐号信息给它,从而实现自动登录。

3.实现

Golang中已经预置了很多网络访问的包,访问HTTP内容可以使用net/http包中的函数,使用非常简单。代码如下:

// 本程序用于新昌教育网自动登录用
package main
import (
	"flag"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
)
func main() {
	//下面三句用于处理参数,注意flag.Parse()必须调用。
	//flag包非常实用,可以自动处理命令行参数的很多细节。
	//比如:自动处理--help,它会输出我们设定的信息
	user := flag.String("user", "", "input your user name.")
	pwd := flag.String("pwd", "", "input your password.")
	flag.Parse()
	if *user == "" || *pwd == "" {
		fmt.Println("please input user name and password!")
		return
	}

	//GET一个网页,注意把response关闭掉
	//我使用了golang的一个技能:defer,它能在函数结束前执行指定内容
	res, err := http.Get("http://www.baidu.com")
	if err != nil {
		fmt.Println("network is error.")
		return
	}
	defer res.Body.Close()

	//使用ioutil中的函数方便的读取GET到的网页内容。虽然我们也可以自己读取,但哪有这样方便啊。
	data, _ := ioutil.ReadAll(res.Body)
	//查找是否有“未登录”的字符串
	idx := strings.Index(string(data), "<title>上网认证系统 - 登录</title>")
	if idx != -1 {
		//使用net/url包来管理post数据,对于简单的ASCII内容来说可以简单的自己合成字符串。
		//但使用它,可以保证不会出错。
		v := url.Values{}
		v.Set("username", *user)
		v.Set("password", *pwd)
		v.Set("pwd", *pwd)

		body := strings.NewReader(v.Encode()) //把form数据编下码

		//建立HTTP对象
		client := &http.Client{}
		//建立http请求对象
		req, _ := http.NewRequest("POST", "http://172.16.254.10/webAuth/", body)
		//这个一定要加,不加form的值post不过去
		req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value") 

		resp, _ := client.Do(req) //发送
		defer resp.Body.Close()   //关闭resp.Body
		data, _ := ioutil.ReadAll(resp.Body)
		idx := strings.Index(string(data), "<font color=\"red\">登陆成功, 您可以上网了</font>")
		if idx != -1 {
			fmt.Println("login success!")
		}
		//fmt.Println(string(data), err)
	} else {
		fmt.Println("you are alread login!")
	}

}

所有代码已经进行了注释,相信大家可以轻松的阅读。

4.使用

我平时一般用windows平台,这里我讲一下windows平台下的用法。首先用golang生成exe文件;然后左击这个exe文件“创建快捷方式”,编辑这个快捷方式,右键点击快捷方式,点击属性,在“目标”中加上我们的登录帐号和密码,可能如下(注意自己的可执行文件路径):

F:\gofile\src\edu-login\edu-login.exe -user=xxxx -pwd=xxx

然后把这个快捷方式拖到windows的启动文件夹。winxp和windows7稍有不同,大家可以搜索一下解决方法。因为太简单了,这里不作介绍。

5.总结

至此,我们高大上的自动登录软件就做好了。现在大家都可以享受到程序猿的便利了。使用golang不仅可以实现自动登录,使用它来编写个网络爬虫也是轻松如意,而且配合GOLANG的独特语言功能,爬虫性能也会极好。

http://www.misitang.com/index.php/archives/117/

时间: 2024-08-13 12:40:44

用Golang让自己的电脑自动登录“上网管理”系统的相关文章

estore商城案例(三)------Filter过滤器:自动登录&amp;权限管理

前面写好了用户登录\注册\添加商品的功能模块.下面写一下对于这些功能模块的相关过滤器---自动登录与权限管理: 一.自动登录: 业务逻辑是这样的:jsp登录页面有个“自动登录选项”,如果登录这勾选了,那么在serlvet程序中则会额外的生成一个保存用户名和密码的cookie,然后每次用户向服务器发送请求时,Filter过滤器都会先判断用户的登录状态(session),如果已经登录那么无需做出受任何操作直接放行,如果没有登录(无session),那么这时体现自动登录功能作用的时候到了,先获取自动登

Lync 小技巧-53-Windows 2012 R2-加域-电脑-自动-登录

场景: 那么,为何自动登录呢? 1) 在Windows Server 2012 R2的域环境中,加域的电脑不会自动登录. 2) 不登录的情况下,远程桌面会报错. 3) 如果自动登录后,再远程桌面就没问题. 那么,如何自动登录呢? 1) 不加域可以在开始-运行-Rundll32 Netplwiz.dll,UsersRunDll,取消使用密码登录. 2) 如果加域,就不行,需要按本文后续方法进行设置. 参照: 修改注册表windows自动登陆 我把注册表的AutoAdminLogon数值改为1,自动

使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员

一.项目需求 每周从A系统生成一张Excel报表,发送此报表给指定人员,相关人员依据此报表去完成后续的工作. 项目限制: 1.无法通过EDI系统交互的方式从后台读取数据 2.由于公司网络环境限制,不能使用SMTP发送邮件,比如,不能通过smtp.163.com发送邮件 二.解决方案 模拟人工操作,登录系统,输入相应查询条件,生成报表,保存后发送邮件给指定人员. 采用技术:采用Python 三.关键点 1.使用selenium模拟登录浏览器 '使用IE浏览器 driver.webdriver.Ie

C# 自动登录网页,浏览页面【转载】

需求:客户的数据同时存在在另外一个不可控的系统中,需要和当前系统同步. 思路:自动登录另外一个系统,然后抓取数据,同步到本系统中. 技术点:模拟用户登录:保存登录状态:抓取数据 /// <summary> /// visit the target url /// </summary> /// <param name="targetURL"></param> /// <param name="cc">this

iOS 自动登录的讲解

iOS 的自动登录 就是 先要用户名和密码 登入成功 后  保存到本地的数据库中   然后下次打开的程序的时候 直接取出本地数据库中的用户名和密码 iOS登录及token的业务逻辑 登录的业务逻辑 { http:是短连接. 服务器如何判断当前用户是否登录? // 1. 如果是即时通信类:长连接. // 如何保证服务器跟客户端保持长连接状态? // "心跳包" 用来检测用户是否在线!用来做长连接! http:短连接使用token 机制来验证用户安全性 // token 值: 登录令牌!

在开始屏幕(欢迎屏幕、控制面板的用户账户设置)上隐藏用户账户和开机自动登录某个账户

1.演示环境 本次演示使用的是windows 10,Windows Vista及以上的系统与此类似.为了演示,我在计算机中创建了两个用户"paitouxi"和"xi".以"paitouxi"的身份登录系统,在一些设置项中可以看到其他账户如"xi"的信息.该信息可以在以下几个地方可以看到. (1)开始屏幕 (2)开始菜单 (3)控制面板 (4)设置("开始菜单"左侧的"设置"按钮) (5)

让Win8自动登录免输入密码的小技巧

按Win+R键,输出“netplwiz”,单击“确定”,弹出“用户帐户”窗口.将第一个画框上的勾选去掉——应用——弹出自动登录输入你的密码——确定——确定完成.重启看看电脑是不是不用输入密码也可以自动登录了,注销后还要输入密码的.

Delphi制作QQ自动登录器源码

Delphi制作QQ自动登录器源码 http://www.cnblogs.com/sunsoft/archive/2011/02/25/1964967.html 以TM2009为例,检查了一下,未登录之前一个窗体,上边两个控件,登录以后,窗体捕获到一个控件,根据这个,首先找到QQ登录框,输入用户名,密码的位置,获取窗体句柄的具体代码如下: 这里先定义了一个record类型, 1   TQQWnd= record 2     QQWnd,QStatusWnd: HWND;  //QQ窗口句柄,QQ

winform系统自动登录实现

转载:http://www.cnblogs.com/wuhuacong/archive/2012/08/21/2648339.html 系统自动登录有时候很必要,在用户自己绝对信任的电脑上,自动登录对用户来说,很方便友好的,君不见,QQ如此.旺旺如此等等.其实实现思路就是通过给exe执行文件传递登录参数即可,必要时登录的参数值还可以进行加密,给第三方进行运行调用,以前就做过一个在Web上自动启动桌面程序Visio应用软件的操作,其实原理就是一样,通过传递参数给执行文件实现的. [STAThrea