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

首頁 > 開發 > JS > 正文

NodeJs 模仿SIP話機注冊的方法

2024-05-06 16:52:31
字體:
來源:轉載
供稿:網友

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

項目依賴模塊:

  • 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); }); }

終端運行截圖

NodeJs,SIP話機

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 {  } });

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久国产综合久久91精品网站| 亚洲综合精品伊人久久| 91高潮精品免费porn| 精品国产一区二区三区久久狼黑人| 亚洲电影成人av99爱色| 欧美激情二区三区| 国产精品大陆在线观看| 亚洲最新视频在线| 久久久精品免费视频| 欧美视频专区一二在线观看| 日韩av电影院| 国产亚洲精品激情久久| 久久天天躁狠狠躁夜夜躁| 日韩经典中文字幕在线观看| 国产91精品黑色丝袜高跟鞋| 久久影院资源站| 国产精品久久久久国产a级| 国产精品高潮呻吟久久av无限| 国产精品女主播视频| 在线视频中文亚洲| 中文字幕日韩综合av| 亚洲经典中文字幕| 亚洲综合中文字幕在线| 少妇激情综合网| 欧美一级视频一区二区| 川上优av一区二区线观看| 日韩暖暖在线视频| 欧美精品在线免费播放| y97精品国产97久久久久久| 日韩欧美亚洲范冰冰与中字| 92看片淫黄大片看国产片| 欧美老女人xx| 在线日韩av观看| 欧美最猛性xxxx| 中文字幕久久久av一区| 国产日韩视频在线观看| 成人亚洲激情网| 久久人人看视频| 国产精品丝袜白浆摸在线| 精品国产精品三级精品av网址| 51视频国产精品一区二区| 欧美日韩美女视频| 国产欧美日韩高清| 日韩精品中文字幕视频在线| 亚洲在线第一页| 久久在线观看视频| 国产中文字幕日韩| 国产日韩中文字幕在线| 久久久久久久久爱| 一区二区三区四区在线观看视频| 在线日韩第一页| 91chinesevideo永久地址| 3344国产精品免费看| 88国产精品欧美一区二区三区| 中文字幕日韩在线播放| 国产精品电影网站| 91精品国产综合久久久久久蜜臀| 国产在线播放91| 久久久久久久久久久网站| 国产成人鲁鲁免费视频a| 日韩最新在线视频| 国产精品海角社区在线观看| 久久久精品影院| 在线观看欧美视频| 亚洲精品中文字| 欧美日韩成人精品| 日韩精品视频在线免费观看| 成人福利视频在线观看| 亚洲福利视频免费观看| 午夜精品久久久久久久久久久久久| 国产成人精品电影| 狠狠躁夜夜躁人人爽超碰91| 欧美裸体xxxx极品少妇| 久久亚洲精品网站| 国产精品一区二区电影| 91亚洲国产精品| 日韩av男人的天堂| 国产精品一区二区久久精品| 亚洲性视频网站| 亚洲国产成人av在线| 国内精品视频在线| 91久久国产综合久久91精品网站| 亚洲欧美日韩国产中文| 亚洲精品免费网站| 久久精品国亚洲| 丝袜情趣国产精品| 亚洲免费小视频| 欧美成年人视频| 亚洲自拍偷拍色片视频| 久久精品色欧美aⅴ一区二区| 欧美黑人巨大精品一区二区| 亚洲成色777777在线观看影院| 2020国产精品视频| 欧美亚洲另类在线| 精品少妇一区二区30p| 日韩av免费在线| 精品五月天久久| 国产日韩在线一区| 88国产精品欧美一区二区三区| 欧美在线视频免费播放| 欧美色视频日本版| 亚洲在线观看视频网站| 北条麻妃一区二区三区中文字幕| 国产91色在线免费| 久久久精品久久久久| 久久视频精品在线| 国产精品久久久久久久久久免费| 欧美中文在线视频| 国产精品情侣自拍| 国产精品久久久91| 国产日本欧美一区二区三区| 亚洲精品97久久| 欧美久久精品午夜青青大伊人| 亚洲剧情一区二区| 777午夜精品福利在线观看| 高清一区二区三区日本久| 国产精品69精品一区二区三区| 国产精品专区h在线观看| 成人精品在线观看| 日韩精品极品视频免费观看| 1769国内精品视频在线播放| 日韩中文字幕免费视频| 久久久久久久久久久91| 91在线观看免费网站| 亚洲国产日韩欧美在线99| xvideos国产精品| 国产综合色香蕉精品| 亚洲一区亚洲二区| 亚洲视频在线免费观看| 色哟哟亚洲精品一区二区| 亚洲精品乱码久久久久久金桔影视| 不卡在线观看电视剧完整版| 久久av在线播放| 欧美日韩亚洲视频一区| 欧美黑人xxxx| 超碰日本道色综合久久综合| 亚洲午夜未删减在线观看| 亚洲精品美女在线观看| 在线播放亚洲激情| 久久精品电影网| 亚洲精品国产精品乱码不99按摩| 国产亚洲一级高清| 亚洲理论在线a中文字幕| 96pao国产成视频永久免费| 欧美极品美女电影一区| 黄网动漫久久久| 久久九九精品99国产精品| 成人乱人伦精品视频在线观看| 日本亚洲精品在线观看| 欧日韩不卡在线视频| 久久精品国产亚洲7777| 国产91在线播放九色快色| 狠狠色狠狠色综合日日小说| 欧美制服第一页| 日韩高清人体午夜| 亚洲人成免费电影| 日韩亚洲精品视频| 欧美在线中文字幕| 日韩精品在线观看一区| 九九精品视频在线| 91产国在线观看动作片喷水| 日韩美女福利视频| 538国产精品视频一区二区| 成年无码av片在线|