亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

NodeJs 模仿SIP話機注冊的方法

2019-11-19 11:18:06
字體:
來源:轉載
供稿:網友

本項目需要對應的后端接口、信令環境才能正常運行,本文章只涉及前端內容。

項目依賴模塊:

  • NodeJs
  • readline:命令行輸入
  • ws:與服務端建立websocket連接
  • superagent:與服務端建立請求連接,效果類似ajax請求
  • tsk_md5:項目登錄密碼使用MD5加密

項目需求

模擬SIP話機頻繁向服務器發起注冊請求,以得到服務器最大SIP注冊數

項目實現概述

  1. 終端輸入連續注冊分機的開始分機號和結束分機號
  2. 終端輸入統一的SIP注冊密碼
  3. 終端輸入服務器地址
  4. 先進行用戶登錄鑒權,用戶登錄鑒權通過后再發起SIP注冊

代碼分析

1. 引入項目所需模塊

var WebSocket = require('ws'), superagent = require('superagent'), tskMD5 = require('./tsk_md5') const readline = require('readline');

2. 創建readline 接口實例

const rl = readline.createInterface({    input: process.stdin,    output: process.stdout,    prompt: 'OHAI> ' });

3. 定義所需變量

var obj = {}, httpHeader = {}, baseUrl ='', pass = '', ip = '', websocketUrl = ''var keepWsAlive, readyState

4. 讀取readline 輸入信息函數

function getReadline() { const lines = []; // 用于保存所有輸入信息。 console.log('Please input the range of extensions(eg: 1001,1010):/n') rl.on("line", function(line) {  if (line ==='') {   console.log('The input is empty, please input again:/n')  } else {   lines.push(line);   if (lines.length === 1) {    obj.extensionsArr = line.split(',');    console.log('Please input the password(eg:1234aa):/n')   } else if (lines.length === 2) {    obj.password = line;    pass = line;    console.log('Please input the ip(eg:192.168.124.125):/n')   } else if (lines.length === 3) {    websocketUrl = 'ws://' + line + ':8089/ws';    obj.websocketUrl = websocketUrl;    obj.ip = line;    ip = line;    console.log('Starting register.../n');    // 開始注冊事件    loopRegister(obj)    }  } });  // close事件監聽 rl.on("close", function(){  // 結束程序  process.exit(0); }); }

終端運行截圖

 

5.注冊事件中包含幾個動作

1)設置httpHeader:瀏覽器與服務器ajax請求有固定的請求頭信息,此處模擬瀏覽器的請求頭信息。

用于后續發送請求進行用戶登錄鑒權。

function setHttpHeader(username) {  httpHeader = {   Accept:'application/json, text/javascript, */*; q=0.01',   'Accept-Encoding': 'gzip, deflate',   'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,pt;q=0.7',   'Cache-Control': 'no-cache',   Connection: 'keep-alive',   'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',   Cookie: 'TRACKID='+trackid+'; session-identify=sid121076289-1520217430; username=admin; user_id=0',   Host: ip +':8089',   Origin: 'http://'+ip+':8089',   Pragma: 'no-cache',   Referer: 'http://'+ip+':8089/gswave/',   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0',   'X-Requested-With':'XMLHttpRequest'  }  var accountData = {   action:'challenge',   user:username  }  baseUrl = 'http://'+ip+':8089/webrtccgi?';  getChanllenge(accountData, username) // 用戶鑒權函數 }

2)用戶登錄鑒權(本項目中與服務器交互需要使用,具體使用看服務器端設置)

<!--賬號密碼 鑒權-->function getChanllenge(accountData, username) {  console.log('start getChangllenge')  var challenge = ''  //獲取challenge   superagent    .post(baseUrl)    .set(httpHeader)    .type('form')    .send(accountData)    .redirects(0)    .end(function(err, result) {     if (typeof(result) == 'undefined') {      console.error("get challenge is error, result is undefined");     } else {      var responce = result.body      if(responce && responce.status === 0) {       challenge = responce.response.challenge       getCookie(challenge, username)      } else {       console.error('get challenge is error, result.body.status is not 0')      }     }    }); } <!--cookie 鑒權-->  function getCookie(challenge, username) {  var md5key = tskMD5.MD5.hexdigest(challenge + pass) // MD5加密用戶登錄密碼  var subData={   token: md5key,   action: 'login',   user: username  }  // 開始請求進行用戶登錄密碼鑒權,類似ajax請求  superagent   .post(baseUrl)   .set(httpHeader)   .type('form')   .send(subData)   .redirects(0)   .end(function(err, res) {    if (typeof(res) == 'undefined') {     console.log("get cookie is error, result is undefined");    } else {     var responce = res.body     if(responce && responce.status === 0) {     // 登錄鑒權通過,開始執行SIP注冊      var cookie = responce.response.cookie      // 注冊函數      startSocket(username)     } else {      console.log('get cookie is error, result.body.status is not 0')     }    }   }) }

與服務器建立websocket連接

項目中信令交互信息均通過websocket發送

var ws = new WebSocket(websocketUrl, "sip"); # 注意建立的是sip類型的websocket ws.on('open', function open() {  console.log('ws open message1' + message1)  readyState = WebSocket.OPEN  // 發送相關信息  ws.send(message);  });  ws.on('message', function incoming(data) {  a++;  var dataArr = data.split('/r/n')  if (dataArr[0].indexOf('401') > -1 && a === 1) {   // 發送注冊信令函數(其中發送信令信息,均參考瀏覽器的發送頭進行拼接)   startRegister(ws, dataArr, username)  } else if (dataArr[0].indexOf('200')) {   // ws.close()   // console.log('register sucess...')  } else {  } });

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91免费看片| 国产精品欧美一区二区三区奶水| 久久精品人人爽| 亚洲国产精彩中文乱码av在线播放| 国产免费亚洲高清| 亚洲综合小说区| 日韩精品在线免费观看视频| 久久精品国产精品亚洲| 成人黄色片网站| 国产精品海角社区在线观看| 国产精品亚发布| 国产成人福利夜色影视| 影音先锋日韩有码| 成人h片在线播放免费网站| 亚洲r级在线观看| 成人久久久久爱| 国产一区二区三区视频| 中文字幕亚洲一区二区三区五十路| 成人久久久久爱| 日韩国产一区三区| 国产色婷婷国产综合在线理论片a| 色悠久久久久综合先锋影音下载| 538国产精品视频一区二区| 日韩在线观看免费高清完整版| 国产精品草莓在线免费观看| 亚洲欧美国产日韩天堂区| 国产剧情日韩欧美| 日韩久久免费视频| 国产成人高清激情视频在线观看| 日韩福利在线播放| 日韩电视剧免费观看网站| 九九热这里只有精品免费看| 视频在线观看一区二区| 欧美在线视频网| 91在线精品播放| 精品久久久一区二区| 亚洲国产精品女人久久久| 色哟哟网站入口亚洲精品| 久久久久久久久亚洲| 亚洲自拍偷拍视频| 亚洲影院高清在线| 亚洲人成网站在线播| 69av在线播放| 欧美成人在线免费视频| 亚洲高清免费观看高清完整版| 热久久这里只有精品| 国内免费久久久久久久久久久| 中文字幕亚洲欧美在线| 久久综合久久88| 原创国产精品91| 亚洲福利小视频| 视频在线一区二区| 亚洲另类激情图| 国产精品久久久久久五月尺| 国产人妖伪娘一区91| 日韩av在线免播放器| 久久久精品中文字幕| 亚洲精品理论电影| 国产精品久久久久久久久久三级| 亚洲欧美一区二区三区在线| 亚洲女在线观看| 中文字幕成人精品久久不卡| 91美女片黄在线观看游戏| 中文字幕免费国产精品| 欧美裸体xxxx极品少妇软件| 亚洲精品免费av| 久久久久国产精品一区| 亚洲成色999久久网站| 91亚洲精品久久久| 亚洲成色999久久网站| 欧美电影院免费观看| 91香蕉嫩草神马影院在线观看| 91麻豆国产语对白在线观看| 亚洲毛片在线观看| 久久久久久18| 在线国产精品视频| 国产视频观看一区| 日韩中文字幕网| 欧美成人三级视频网站| 国产精品一区二区三区在线播放| 欧美精品激情blacked18| 日韩一二三在线视频播| 亚洲人成在线播放| 中文字幕欧美精品在线| 欧美激情亚洲视频| 国产欧美va欧美va香蕉在线| 亚洲日本中文字幕免费在线不卡| 精品国产一区二区在线| 精品久久久久久亚洲精品| 欧美日韩亚洲一区二区| 91国产视频在线| 国产成人精品免高潮在线观看| 浅井舞香一区二区| 国产亚洲人成a一在线v站| 亚洲aⅴ男人的天堂在线观看| 欧美精品在线免费播放| 97av视频在线| 欧美精品一区二区三区国产精品| 欧美精品在线极品| 亚洲天堂成人在线视频| 久久精品99久久香蕉国产色戒| 欧美激情一区二区三区在线视频观看| 日本久久久久亚洲中字幕| 国产成人精品亚洲精品| 亚州国产精品久久久| 成人av番号网| 久久影院资源网| 91探花福利精品国产自产在线| 日韩欧美一区视频| 亚洲成人a级网| 久久男人av资源网站| 亚洲乱码一区av黑人高潮| 久久久精品久久| 日韩中文字幕av| 中文字幕日韩欧美精品在线观看| 亚洲人av在线影院| 最新69国产成人精品视频免费| 亚洲精品国产品国语在线| 亚洲综合在线中文字幕| 国产脚交av在线一区二区| 在线视频国产日韩| 久久国内精品一国内精品| 欧美黑人xxxx| 乱亲女秽乱长久久久| 亚洲乱码国产乱码精品精天堂| 精品久久久久久久久久国产| 亚洲国产成人av在线| 国产精品亚洲片夜色在线| 欧美日韩国产一区二区三区| 欧美一区二区色| 97超视频免费观看| 精品亚洲一区二区三区在线观看| 在线成人激情黄色| 欧美亚州一区二区三区| 97**国产露脸精品国产| 亚洲人成啪啪网站| 日韩美女写真福利在线观看| 欧美亚洲在线视频| 在线观看精品自拍私拍| 日韩亚洲精品视频| 国产精品久久久久久久久久久不卡| 日韩欧美精品在线观看| 国产精品爱久久久久久久| 久久av在线看| 国产精品自拍视频| 欧美日韩国产成人高清视频| 91av视频在线观看| 中文字幕欧美视频在线| 91精品视频在线看| 欧美成人精品一区| 成人写真视频福利网| 亚洲性夜色噜噜噜7777| 美女福利精品视频| 国产精品久久久久久久久久久久| 亚洲精品欧美日韩专区| 日韩精品免费综合视频在线播放| 亚洲午夜性刺激影院| 欧美成人午夜激情视频| 亚洲免费小视频| 欧美国产乱视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久久精品免费| 日韩av三级在线观看| 精品日本美女福利在线观看|