首页 > 其他分享 >与校园网斗智斗勇(三)之制作第三方安朗客户端

与校园网斗智斗勇(三)之制作第三方安朗客户端

时间:2023-08-06 19:34:14浏览次数:43  
标签:++ IP packet ppkt 安朗 校园网 byte 数据包 斗智斗勇

前言

  贪欲是人类与生俱来的陋习,但正是因为有贪欲,人类才能进步,“贪”才是我们探索精神的领袖。

  在前两篇博文中,我对安朗(安腾)宽带认证客户端(以下统称蝴蝶)进行了简单的爆破,达到了无障碍使用共享Wifi软件的目的,并且分析和试译了Swiftz协议(以下统称蝴蝶协议),但这并不能满足我的贪欲,所以这一篇记录了我如何从零制作一个属于自己的蝴蝶

准备

说明

  在你开始看这一篇博文之前,请务必看懂蝴蝶协议,并在动手制作之间实时查阅,这会让你的编程效率大大提高。

  根据蝴蝶协议的分析,整个蝴蝶客户端,我们需要实现的是四个主要功能:搜索、上线、心跳、下线。

  • 搜索:构建搜索包,发送搜索包从本机IP:38481.1.1.8:3850,接收返回包。
  • 上线:构建上线包,发送上线包从本机IP:3848服务器IP:3848,接收返回包。
  • 心跳:构建心跳包,循环发送心跳包从本机IP:3848服务器IP:3848(间隔30秒),循环接收返回包。
  • 下线:构建下线包,发送下线包从本机IP:3848服务器IP:3848,接收返回包。

实现

  重点提一下构建数据包,以构建搜索服务器的数据包为例(构建上线、心跳、下线数据包大同小异),至于发送接收数据包则非常简单,利用Socket发报收报即可,但要注意是基于UDP协议的。
  另外,在发送和接收之前,需要加密和解密数据包。即:

  构建数据包——加密数据包——发送数据包——接收数据包——解密数据包

  构建搜索服务器数据包部分示例代码:

  • [C]
void search_server(int sockfd,struct infoset * const pinfo){
    char md5[0x10] = {0x0};
    int  md5len = 0x10;
    char *pkt, *ppkt, *tmphost;
    struct usrinfoSet *psu = pinfo -> psu;
    struct sockaddr_in *pss = pinfo -> pss;
    int sendbytes = 51;
    
    int iplen = strlen(psu -> local_ip), maclen = 0x6;
    pkt = (char *)calloc(sendbytes, sizeof(char));
    ppkt = pkt;
    *ppkt++ = 0x0c;
    *ppkt++ = sendbytes;
    ppkt += 0x10;
    
    *ppkt++ = 0x08;
    *ppkt++ = 0x07;
    *ppkt++ = 0x00;
    *ppkt++ = 0x01;
    *ppkt++ = 0x02;
    *ppkt++ = 0x03;
    *ppkt++ = 0x04;
    ……
    ……
    ……
  • [Python]
def search_server_ip(ip, mac):
    packet = []
    packet.append(0x0c)
    packet_len = 1 + 1 + 16 + 1 + 1 + 5 + 1 + 1 + 16 + 1 + 1 + 6
    packet.append(packet_len)
    packet.extend([i * 0 for i in range(16)])
    packet.append(0x08)
    packet.append(0x07)
    packet.extend([i * 1 for i in range(5)])
    packet.append(0x09)
    packet.append(0x12)
    packet.extend([ord(i) for i in ip])
    packet.extend([i * 0 for i in range(16 - len(ip))])
    packet.append(0x07)
    ……
    ……
    ……
  • [Java]
private void searchServerIp() {
    byte packet_len = 1 + 1 + 16 + 1 + 1 + 5 + 1 + 1 + 16 + 1 + 1 + 6;
    byte[] packet = new byte[packet_len];
    byte i = -1;
    packet[++i] = 0x0c;
    packet[++i] = packet_len;
    for (; i < 17;) {
        packet[++i] = 0;
    }
    packet[++i] = 0x08;
    packet[++i] = 0x07;
    for (byte j = 0; j < 5; j++) {
        packet[++i] = j;
    }
    packet[++i] = 0x09;
    packet[++i] = 0x12;
    byte[] bytes = LOCAL_IP.getBytes();
    for (byte b : bytes) {
        packet[++i] = b;
    }
    for (int j = 0; j < 16 - bytes.length; j++) {
        packet[++i] = 0;
    }
    packet[++i] = 0x07;
    packet[++i] = 0x08;
    ……
    ……
    ……
  • [C#]
public class SearchSend
{
    public byte[] SessionBytes;
    public string IP;
    public string Mac;
    public SearchSend(string ip, string mac)
    {
        IP = ip;
        Mac = mac;
        SessionBytes = new byte[5]
        {
            0,1,2,3,4
            };
    }
    public byte[] ToBytes()
    {
        int offset = 0;
        int iLen = 51;
        byte[] bts = new byte[iLen];
        bts[offset] = 0x0C;
        offset++;
        bts[offset] = 51;
        for (int i = 1; i < 16; i++)
        {
            bts[++offset] = 0;
        }
        offset++;
        offset++;
        bts[offset] = 8;
        ……
        ……
        ……

抓包

  在构建数据包完成后,我们需要利用抓包工具来测试我们构建的数据包是否正确、发送和接收数据包是否正常,而Wireshark这款工具是一个不错的选择。

1.jpg

  我们主要检查的是包的长度、收发端口、以及最重要的Data

2.jpg

  抓包之前,我们要利用蝴蝶协议中提到的3848端口解密算法额外写一个解密程序,用来打印数据包被解密后的数据,以便我们能够更直观地检查。下图以上线数据包为例:

3.jpg

后记

  在编写过程中,一定会遇到许许多多的问题(大神忽略),路漫漫其修远兮,你要上下而求索,要时刻铭记。因为在你想要放弃的时候,其实距离终点只有一步之遥。

  下面说一下当初编写这个程序我的一些经验:

  • 登录确认包可以完全省略。
  • 如果你想节省时间,其实搜索包也可以省略,学校不会频繁更换服务类型和服务器IP地址,记下来填上即可。
  • 服务器是固定三个端口384838493850,但是本地端口是随机的话也能正常认证,绑定同样的端口是为了防止多个认证客户端同时工作,这可能会造成一些错误。
  • 上线包和下线包只发送一次,可以容许一点瑕疵,只要能成功接收到服务器返回的数据包,提取到需要的内容就行。
  • 心跳包的构建必须完全正确,因为是循环地发送和接收,其过程必须稳定,这关系到你能否顺畅地使用校园网,在调试过程中可以拿学校官方的蝴蝶数据进行比对查错。
  • 心跳包发送间隔是30秒,也可以小于30秒,如果心跳包不稳定可以尝试适当调整。
  • 在构建数据包之前要把需要填充的数据整理打包好,例如类型的转换,以及空字符的处理等等,以减少不必要的程序异常。
  • 编写这个程序很简单,但是错误处理和代码优化有点繁琐,将自己当成使用者,并不断测试程序的极限状态,你会发现bug比你头发还多(当然,其根本原因还是我学艺不精)。

  完成程序后,还可以考虑增加一点自己常用的功能,例如集成无线热点,增加NAT穿透等等……

  成品效果图:

4.jpg

标签:++,IP,packet,ppkt,安朗,校园网,byte,数据包,斗智斗勇
From: https://www.cnblogs.com/1gcat/p/17609807.html

相关文章

  • 与Mame街机麻将游戏斗智斗勇,美笑雀取胜思路
    最近无聊,挂着下载看视频感觉没什么太多感兴趣的,想起来以前下的街机麻将合集还没玩过,不如趁着下载的时间玩一下。大部分麻将游戏都带作弊文件,有些实在没有,一个一个打通太花时间,最重要的是电脑作弊严重,百分百的发你垃圾牌不能胡,自己百分百胡就很让人火大。别问我是怎么知道了,Save......
  • 2022-2023年的jlu.test,和校园网出口的流量备忘
    2022年8月疫情结束,学生开学,jlu.test流量升高;2023年12月疫情放开,学生提前离校流量下降;2023年2月学生开始返校;2023年4月末除了南岭校区,其他校区的流量都切换到本地。2022年下半年的几次封校,流量出现陡增。今年流量比较正常,5月1日放假,流量下降不少。     20220325出......
  • 深澜校园网-自动登陆-需输入自己的学号和密码
    深澜校园网-自动登陆-需输入自己的学号和密码原理:输入自己的账号、密码后,让浏览器填写自己设置的密码,模拟用户点击登录按钮 油猴脚本插件-下载地址(适用于电脑版浏览器) google浏览器-应用商店https://chrome.google.com/webstore/detail/tampermonkey-beta/gcalenpjmijn......
  • 校园网
    校园网洛谷题目描述一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使\(B\)在\(A\)学校的分发列表中,\(A\)也不一定在\(B\)学校的列表中。你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软......
  • 解决校园网DNS问题
    本文由newbing生成如何解决校园网DNS问题如果你在连接校园网的时候,发现自己的网站(http://ai.ihua.me)打不开,可能是因为校园网的DNS服务器没有正确解析你的域名。DNS......
  • 【A-005】基于SSH的校园网上订餐系统(含论文)
    开发环境:Eclipse/MyEclipse、Tomcat8、Jdk1.8数据库:MySQL项目介绍:为了顺应时代潮流的发展,便捷人民的生活,提高群众的生活质量,本系统应运而生。在了解了相关线上网上订餐......
  • 让天大校园网变成真正的校园网——PPPOE连接后原先DHCP的IP不可用的解决方案
    首先说明我的场景:一台电脑安装windows,一台安装linux。两台电脑都连接校园网,并且插网线,拨号。这样获取了两个IP:一个是校园网DHCP的IP,一个是PPPOE的IP。另外,windows电脑还......
  • python django 学校校园网(课设、毕设、学习、源码下载)
    pythondjango学校校园网Pythondjango学校官网基于pythonDjango的校园网、学校官网系统后端:python django数据库:MySQL前端:html css js涉及功能:后台管理新闻......
  • 校园网连接设置
    1、路由器直接网线连门口上墙上的网口,没有的去买网线,推荐8m左右,基本够拉到所有位置。2、其他设备不要连接,保证只有一台设备连在路由器上。3、路由器上网方式设置成DHC......
  • 缩点 P2812 校园网络【[USACO]Network of Schools加强版】
    首先找出图中的强连通分量,用tarjan算法。强连通分量内部强联通,所以将其看成一个点是不影响的。进行缩点之后,整张图变成了一个有向无环图。首先对于每一条边进行检测,如果......