From 600a7f5641b1b7f85b3d3b2e4e578ea1c0bfaf50 Mon Sep 17 00:00:00 2001 From: Moe Date: Sat, 6 Jun 2020 20:45:08 -0700 Subject: [PATCH] Better ONVIF Scanner, now displays all found network devices - Will now display ONVIF devices if auth fails - will now display all network devices with operating web panels --- languages/en_CA.json | 3 +++ libs/scanners.js | 10 ++++++++-- web/libs/js/dash2.onvifscanner.js | 20 ++++++++++++++++++++ web/libs/js/dash2.socketio.js | 13 +------------ 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/languages/en_CA.json b/languages/en_CA.json index 73b02b16..120cd1f4 100644 --- a/languages/en_CA.json +++ b/languages/en_CA.json @@ -242,6 +242,9 @@ "ONVIF Scanner": "ONVIF Scanner", "ONVIFEventsNotAvailable": "ONVIF Events not Available", "ONVIFnotCompliantProfileT": "Camera is not ONVIF Profile T Compliant", + "ONVIFErr400": "Found ONVIF port but authorization failed when retrieving the Stream URL. Check username and password used for scan.", + "ONVIFErr405": "Method Not Allowed. Check username and password used for scan.", + "ONVIFErr404": "Not Found. This may just be the web panel for a network device.", "Scan Settings": "Scan Settings", "ONVIFnote": "Discover ONVIF devices on networks outside your own or leave it blank to scan your current network.
Username and Password can be left blank.", "Range or Single": "Range or Single", diff --git a/libs/scanners.js b/libs/scanners.js index 7bc80bec..4e20196a 100644 --- a/libs/scanners.js +++ b/libs/scanners.js @@ -54,7 +54,7 @@ module.exports = function(s,config,lang,app,io){ ip = addressRange.join(',') } if(ports === ''){ - ports = '80,8080,8000,7575,8081,554' + ports = '80,8080,8000,7575,8081,9080' } if(ports.indexOf('-') > -1){ ports = ports.split('-') @@ -120,15 +120,21 @@ module.exports = function(s,config,lang,app,io){ return s.stringContains(find,err.message,true) } var foundDevice = false + var errorMessage = '' switch(true){ //ONVIF camera found but denied access case searchError('400'): //Bad Request - Sender not Authorized + foundDevice = true + errorMessage = lang.ONVIFErr400 + break; case searchError('405'): //Method Not Allowed foundDevice = true + errorMessage = lang.ONVIFErr405 break; //Webserver exists but undetermined if IP Camera case searchError('404'): //Not Found foundDevice = true + errorMessage = lang.ONVIFErr404 break; } if(foundDevice && foundCameraCallback)foundCameraCallback({ @@ -136,7 +142,7 @@ module.exports = function(s,config,lang,app,io){ ff: 'failed_capture', ip: camera.ip, port: camera.port, - error: err.message + error: errorMessage }); s.debugLog(err) } diff --git a/web/libs/js/dash2.onvifscanner.js b/web/libs/js/dash2.onvifscanner.js index a9ce1520..f58b3e92 100644 --- a/web/libs/js/dash2.onvifscanner.js +++ b/web/libs/js/dash2.onvifscanner.js @@ -5,6 +5,25 @@ $.oB={ v:$('#onvif_video'), }; $.oB.f=$.oB.e.find('form');$.oB.o=$.oB.e.find('.output_data'); +var drawProbeResult = function(options){ + var tempID = $.ccio.gid(); + $.oB.foundMonitors[tempID] = Object.assign({},options); + $.oB.e.find('._loading').hide() + $.oB.e.find('._notfound').remove() + $.oB.e.find('[type="submit"]').prop('disabled',false) + var info = options.error ? options.error : options.info ? $.ccio.init('jsontoblock',options.info) : '' + var streamUrl = options.error ? '' : 'No Stream URL Found' + if(options.uri){ + streamUrl = options.uri + } + $('#onvif_probe .output_data').append(` +    + ${options.ip} + ${options.port} + ${info} + ${streamUrl} + `) +} $.oB.f.submit(function(ee){ ee.preventDefault(); e={}; @@ -57,4 +76,5 @@ $.oB.e.find('[name="user"]').change(function(e){ if($.ccio.op().onvif_probe_user){ $.oB.e.find('[name="user"]').val($.ccio.op().onvif_probe_user) } +$.oB.drawProbeResult = drawProbeResult }) diff --git a/web/libs/js/dash2.socketio.js b/web/libs/js/dash2.socketio.js index 405fcfef..5b5f82bd 100644 --- a/web/libs/js/dash2.socketio.js +++ b/web/libs/js/dash2.socketio.js @@ -822,18 +822,7 @@ $user.ws.on('f',function (d){ // } // break; case'onvif': - var tempID = $.ccio.gid(); - $.oB.foundMonitors[tempID] = Object.assign({},d); - $.oB.e.find('._loading').hide() - $.oB.e.find('._notfound').remove() - $.oB.e.find('[type="submit"]').prop('disabled',false) - d.info=$.ccio.init('jsontoblock',d.info) - if(d.uri){ - d.stream=d.uri - }else{ - d.stream='URL not Found' - } - $('#onvif_probe .output_data').append('  '+d.ip+''+d.port+''+$.ccio.init('jsontoblock',d.info)+''+d.stream+'') + $.oB.drawProbeResult(d) break; } delete(d);