python 캠퍼스 네트워크 자동 로그 인 구현 예시 설명

최근 에 크 랜 베 리 파이 로 원 격 모니터링 시스템 을 만 들 고 싶 고 학교 네트워크 가 홈 페이지 에서 로그 인 해 야 하기 때문에 크 랜 베 리 파 는 모니터 를 가지 고 다 니 기 가 불편 하기 때문에 캠퍼스 네트워크 에 자동 으로 로그 인 할 수 있 는 스 크 립 트 프로그램 을 만 들 고 매번 브 라 우 저 를 열 어 계좌 번 호 를 입력 해 야 하 는 고민 을 덜 었 다.
1.도구
불 여우 브 라 우 저+firedebug 플러그 인,debug 플러그 인 은 브 라 우 저 에 추가 구성 요 소 를 추가 할 수 있 습 니 다.다른 브 라 우 저 도 브 라 우 저의 네트워크 행동 을 모니터링 할 수 있 으 면 됩 니 다.
python+requests 패키지
2.절차
1)  로그 인 인터페이스 에 먼저 열 고 f12 를 누 르 면 firedebug 플러그 인 을 엽 니 다.이때 debug 는 아무런 기록 행위 가 없 으 며 새로 고침 단 추 를 누 른 다음 로그 인 단 추 를 누 르 면 debug 가 콘 솔 옵션 카드 를 다시 꺼 냅 니 다.이때 많은 get 방법 과 마지막 으로 로그 인 으로 인해 발생 하 는 POST 방법 을 발견 할 수 있 습 니 다.그림 과 같 습 니 다.

2)POST 방법의 작은 화살 표를 클릭 하면 브 라 우 저의 요청 헤더 헤더 정 보 를 발견 할 수 있 습 니 다.이것 은 우리 가 저장 해 야 합 니 다(응답 헤더 가 아 닙 니 다).

3)POST 옵션 의 내용 을 살 펴 보면 변수 와 인 자 를 모두 저장 해 야 합 니 다.이 안에 password 가 너무 밀 착 되 어 있 는 것 을 볼 수 있 습 니 다.자신의 계 정 비밀번호 만 로그 인 하면 프로그램 은 여기 서 끝 날 수 있 습 니 다.그 중의 데 이 터 를 자신 이 잡 은 숫자 로 바 꾸 고 아래 코드 를 사용 하면 캠퍼스 네트워크 에 로그 인 할 수 있 습 니 다.

import requests
#    
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#      
post_header={
 'Host': 'a.nuist.edu.cn',
 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
 'Accept': 'application/json, text/javascript, */*; q=0.01',
 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 'Accept-Encoding': 'gzip, deflate',
 'Content-Type': 'application/x-www-form-urlencoded',
 'X-Requested-With':'XMLHttpRequest',
 'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
 'Content-Length': '67',
 'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername=123441534;\
 sunriseDomain=NUIST;sunriseRememberPassword=true; sunrisePassword=123456;\
 PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
 'Connection':'keep-alive',
}
#      
post_data={'domain':'NUIST',
   'enablemacauth':'0',
   'password':'MTgzMzEw',
   'username':'xxxxxxx'
   } 
#  post      
z=requests.post(post_addr,data=post_data,headers=post_header)
4)  하지만 문 제 는 위의 프로그램 은 스스로 만 사용 할 수 있다 는 것 입 니 다.계 정 비밀 번 호 를 바 꾸 어 로그 인 하면 브 라 우 저 로 패 킷 을 잡 아야 합 니 다.귀 찮 습 니 다.위의 절 차 를 자세히 살 펴 보 니 다른 계 정 을 쓰 려 면 가방 을 잡지 않 아 도 로그 인 할 수 있 는 프로그램의 난점 은 post 를 구성 하 는 것 입 니 다.data 프로그램 에서 password 가 암호 화 되 었 습 니 다.암호 화 방식 을 알 수 있다 면 일반적인(본 학교 내)프로그램 을 쓰 는 것 이 매우 쉽 습 니 다.
사실 이 단 계 는 자주 사용 하 는 암호 화 방법 에 대해 잘 알 고 있다 면 웹 페이지 의 소스 코드(js)를 보면 암호 화 방식 을 쉽게 얻 을 수 있 습 니 다.안 타 깝 게 도 저 는 잘 모 르 겠 습 니 다.md5 암호 화 만 알 고 있 습 니 다.그래서 저 는 python 의 hashlib 가방 으로 비밀 번 호 를 암호 화 한 다음 에 잡 은 데이터 와 같 는 지 확인 하려 고 했 습 니 다.안 타 깝 게 도 한 글자 도 똑 같은 지 확인 하려 고 했 습 니 다.그 다음 에 데이터 가 로 컬 에서 서버 에서 보 낸 것 이 라면 암호 화 과정 은 반드시 클 라 이언 트 에서 이 루어 질 것 이 라 고 생각 합 니 다.js 스 크 립 트(웹 프로 그래 밍 에 대해 잘 모 르 고 js 가 클 라 이언 트 에서 실 행 될 수 있다 는 것 만 알 기 때문에 js 스 크 립 트 가 passward 인 코딩 을 완성 한 것 으로 추측 합 니 다)를 통 해 debug 를 통 해 잡 은 js 코드 를 볼 수 있 습 니 다.
debug 디 버 거 를 열 면 왼쪽 에 js 코드 가 줄 지어 있 는 것 을 볼 수 있 습 니 다.js 파일 이름 을 통 해 js 의 역할 을 대충 추측 할 수 있 습 니 다.

5)왼쪽 파일 이름 을 보면 login.js,md5.js,client.js,usercss.js 가 작용 한 다 는 것 을 직접 추측 할 수 있 습 니 다.md5 가 password 암호 화 방식 이 아 닌 이상 다른 js 코드 를 볼 수 있 습 니 다.다행히도 첫 번 째 base 64 코드 를 누 르 면 민감 하 게 이 코드 가 인 코딩 방식 이라는 것 을 알 게 되 었 습 니 다.서둘러 바 이 두 에서 base 64 는 역시 인 코딩 방식 이 었 습 니 다.쇠뿔 도 단 김 에 바 이 두 python 의 base 64 인 코딩 이 실현 되 었 습 니 다.python 이 base 64 가방 을 통합 한 것 을 발 견 했 습 니 다.이 가방 을 이용 하여 비밀 번 호 를 다시 인 코딩 합 니 다...............................................................
전체 코드 는 다음 과 같 습 니 다(거 친 버 전):

#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
 FileName:conNet.py
 Author:shenhuixiang
 Copyright(c)2017,shenhuixiang
'''
import base64
import requests
'''
            
              CMCC
       NUIST
'''
USER_ACCOUNT='110'
DOMAIN_SELECTION='CMCC'
USER_PASSWATD='123456'
#    
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#      
post_header={
 'Host': 'a.nuist.edu.cn',
 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
 'Accept': 'application/json, text/javascript, */*; q=0.01',
 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 'Accept-Encoding': 'gzip, deflate',
 'Content-Type': 'application/x-www-form-urlencoded',
 'X-Requested-With':'XMLHttpRequest',
 'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
 'Content-Length': '67',
 'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername='+USER_ACCOUNT+';\
 sunriseDomain='+DOMAIN_SELECTION+';sunriseRememberPassword=true; sunrisePassword='+USER_PASSWATD+';\
 PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
 'Connection':'keep-alive',
}
'''
password post      base64  ,
    password    ...    .
'''
post_data={'domain':DOMAIN_SELECTION,
   'enablemacauth':'0',
   'password':base64.b64encode(USER_PASSWATD.encode()),
   'username':USER_ACCOUNT
   }
#  post      
z=requests.post(post_addr,data=post_data,headers=post_header)
#z.text str   json        byte      unicode            
s=z.text.encode('utf-8').decode('unicode-escape')
print(s)
이상 의 python 이 캠퍼스 네트워크 자동 로그 인 을 실현 하 는 예시 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기