- 트래픽을 관리하기 위한 하나의 솔루션, 흔히 보는 접속자 대기가 그것
- https://traffic.kaist.ac.kr/ 에서 동작 중
- 혹시 모르지만 서버 시간을 여기서 제공해준다.
Global Params:
- opcode: 실행할 명령어 이름 (Opcode Table 참고)
- nfid: 0
- prefix: Response 맨 앞에 붙음
- sid: service_1
- js: yes
- user_data: 카이스트 UID
- 1550417639182 (timestamp로 생각됨)
Opcode Table:
opcode | 이름 |
---|---|
5101 | getTidchkEnter |
5002 | chkEnter |
5003 | aliveNotice |
5004 | setComplete |
- 처음에 요청할 시 호출
- 이를 통해 Key를 받아오는 것으로 추정
- getTid와 chkEnter 두개의 함수를 스까 해놓은 것인데, Tid가 Ticket ID 라는 뜻이다.
Params:
- aid: act_03 (뭔지 모름)
Response:
NetFunnel.gRtype=5101;
NetFunnel.gControl.result='5002:200:key=[0-9A-F]{254}\
&nwait=0&nnext=0&tps=0&ttl=0&ip=traffic.kaist.ac.kr&port=443';
NetFunnel.gControl._showResult();
- key를
/key=([0-9A-F]+)/
를 통해 얻어내자 - NetFunnel.gControl.result도
/gControl\.result='[^\r\n]+?';/
를 통해 얻어내자 - 저기서 200 (
result.substr(5, 3)
) 이 retCode이다. - 200이 뜨면 개이득이고, 201이 뜨면 계속 chkEnter로 순번이 왔나 체크를 해줘야 한다.
- 일단 티켓을 받긴 했는데 들어갈 수 있는지를 체크하는 명령어 같다.
요청을 받은 후 보내는 답장 요청
Params:
- key: 받은 key
Response:
- 별 거 없다
- 설정 제외하고는 uglify 돼있다
짜증 - 다행히도 변수명은 다 살아있다.
- NetFunnel.TsClient 가 실제 요청 관련된 곳인 듯 하다.
- Tampermonkey 등을 통해
NetFunnel.TS_DEBUG_MODE = true;
로 바꿔주자
카이스트에서 사용하지 않음!!
- 표준편차가 작을 경우에 (요청과 요청 사이의 시간 간격이 일정할 경우)
- 단위 시간 당 요청량 높을 경우 (기본값: 20초 당 18개 요청)
- 완료 요청이 없는 요청 (기본값: 최대 10개, opcode 5004로 추정)
NetFunnel을 통해서 Key를 가져왔다면 이를 사용해야 한다.
Cookie NetFunnel_ID를 NetFunnel.gControl.key로 설정해야 한다.
수강신청을 변경하기 위한 요청이다.
Body:
- processType: registrationSave
- affairId: 33
- affairName: 수강신청 변경
- hid_year: 2019 (연도)
- hid_term: 1 (아마 봄학기를 의미하는 듯)
- hid_subjectNo: 10.009 (과목의 전산코드)
- hid_subjectTitle: Intermediate English Reading & Writing (과목명)
- hid_lectureClass: D (분반)
- hid_deptId: 4424 (인문사회과학부)
- hid_credit: 2.0 (학점)
- hid_subjectId: 36 (과목 ID라고는 돼있는데 무엇을 암시하는 거지?)
그 외에도 이런 필드 들이 있다.
hid_reattend: N
hid_mngFlag: 1
hid_termFlag: NULL
hid_rowNo: 4
hid_re_year:
hid_re_term:
hid_re_subjectNo:
hid_re_class:
hid_re_score:
결론: 그냥 직접 요청해보고 Request를 적당한 json 같은 데에 베껴두자
이걸로 간단한 매크로를 짜는 건 이걸 읽는 사람에게 맡겨둔다.