#!/usr/bin/python3

# ## {R2D2919B742E} ##
# ###########################################################################
# What if magic existed?
# What if a place existed where your every thought and dream come to life.
# There is only one catch: it has to be written down.
# Such a place exists, it is called programming.
#    - Scott Taylor Reph, RightThumb.com
# ###########################################################################
# ## {C3P0D40fAe8B} ##

import os
import sys
# import simplejson as json
# import shutil
# import sqlite3
import _rightThumb._construct as __
__.appReg = __name__
import _rightThumb._base2 as _
import _rightThumb._vars as _v
import _rightThumb._string as _str



from lxml import html
import requests
import cssselect
from bs4 import BeautifulSoup 

_.switches.register('IP', '-ip','54.236.153.59')
# _.switches.register('Output', '-o','folder\\appOut.py')
# _.switches.register('Move', '-move','completed_in-folder_name')

_.appInfo[__name__] = {
    'file': 'whoishere.py',
    'description': 'Changes the world',
    'prerequisite': [],
    'examples': [],
    'columns': [],
    }

_.appInfo[__name__]['examples'].append('p whoishere -ip 54.236.153.59')

# _.appInfo[__name__]['columns'].append({'name': 'name', 'abbreviation': 'n'})


# def formatColumns(columns):
#     result = ''
#     for c in columns.split(','):
#         for col in _.appInfo[__name__]['columns']:
#             for a in col['abbreviation'].split(','):
#                 if a == c:
#                     c = col['name']
#         result += c + ','
#     result = result[:-1]
#     return result

# _.switches.trigger('Column',formatColumns)

if not __name__ == '__main__':
    _.argvProcess = False
else:
    _.argvProcess = True


_.switches.process()
appDBA = __.clearFocus( __name__, __file__ )
__.appReg = appDBA
def focus( parentApp='', childApp='', reg=True ):
    global appDBA
    f = __.appName( appDBA, parentApp, childApp )
    if reg:
        __.appReg = f
    return f




# pipeData = ''

# if not sys.stdin.isatty():
#     pipeData = sys.stdin.readlines()
#     try:
#         if pipeData[0][0].isalnum() == False:
#             pipeData[0] = pipeData[0][1:]
#     except Exception as e:
#         pass


# if _.switches.isActive('_File_'):
#     _.tables.register('toCheck') # table, rows = []
#     _.switches.fieldSet('_File_','active',True)
#     _.switches.fieldSet('_File_','value','toCheck.json')
#     _.tables.get('toCheck',_.switches.value('_File_'))
#     _.tables.trigger('toCheck','stamp,time,date',_.float2Dated,True)
#     _.tables.sort('toCheck', 'name')

#     _.tables.registerView('test_table','sample3','name,age','age') # table, view, fields, sort
#     _.tables.view('test_table','sample') # table, view

#     _.switches.fieldGet('Column','pos')
#     if _.switches.exists('Column2'):
#         print('This is a switch')




#     if _.switches.isActive('Output') == True:


#     if _.switches.isActive('Move') == True:
#             shutil.move(_.ci(_.switches.value('Input')), _.switches.value('Move') + _v.slash + _.ci(_.switches.value('Input')))
#     # if _.showLine(string):
#         # print(line)



########################################################################################
# class TheChildItems:

#     def __init__(self, name, switch):
#         self.name = name
#         self.active = False
#         self.value = None

#     def trigger(self,script):
#         self.script_trigger = script

#     def changeStatus(self,newStatus):
#         self.active = newStatus
# class TheParentItems:

#     def __init__(self):
#         self.childItemRows = []

#     def register(self, name):
#         self.childItemRows.append(TheChildItems(name))
#     def print(self):
#         childItems = []
#         for ci in self.childItemRows:
#             childItems.append({'name':ci.name})
#         _.tables.register('childClassItems',childItems)
#         # tables.trigger('switches','switch,name',test,True)
#         _.tables.print('childClassItems','name')
#     def printStatus(self):
#         childItems = []
#         for ci in self.childItemRows:
#             if ci.active:
#                 active = 'True'
#             else:
#                 active = 'False'
#             value = ci.value
#             if ci.value == True:
#                 value = 'True'
#             elif ci.value == False:
#                 value = 'False'

#             childItems.append({'name':ci.name ,'active':active,'value': value})
#         _.tables.register('childClassItems',childItems)
#         _.tables.print('childClassItems','name,active,value')
#     def status(self,name,newStatus):
#         for i,ci in enumerate(self.childItemRows):
#             if ci.name == name:
#                 self.childItemRows[i].changeStatus(newStatus)

# if _.switches.isActive('Move'):
    # shutil.move(_.ci(_.switches.value('Input')), _.switches.value('Move') + _v.slash + _.ci(_.switches.value('Input')))


########################################



#     json = _.getTable('base64Key.json')
#    books = _.getText(_v.myTables + _v.slash+'bible_books.csv')

# _.saveTable(jsonFile,'file.json')
# _.saveText(convertedFile,_.ci(_.switches.value('Output')))
# _.saveText(convertedFile,'file.txt')
# _.showLine(item)
########################################################################################
def action():
    # print('does not work yet')
    # ns0=undefined; ns0 = []; ns0.g = []; ns0.b = [];var getKeys = function(name) { var obj = eval(name); var keys = []; for (var key in obj) { keys.push(name + '.' + key); } if (keys.length > 0) { for (var i = 0; i < keys.length; i++) { if (!keys[i].includes("$")) { eval("setTimeout(function(){try{getKeys(\"" + keys[i] + "\");} catch(e) { getKeysError(name); }},10);"); } else { getKeysError(name); } } } else { getKeysSuccess(name); }};var getKeysSuccess = function(name) { var err = false; for (var i = 0; i < ns0.g.length; i++) { if (ns0.g[i] == name) { var err = true; } } if (!err) { ns0.g.push(name); } ns0.g.sort();};var getKeysError = function(name) { var err = false; for (var i = 0; i < ns0.g.length; i++) { if (ns0.g[i] == name) { var err = true; } } for (var i = 0; i < ns0.b.length; i++) { if (ns0.b[i] == name) { var err = true; } } if (!err) { ns0.b.push(name); } ns0.b.sort(); };var getKeysError2 = function(name) {    getKeysSuccess(name); };function globals() { return this; } var names = []; for(var name in globals()) { names.push(name); } copy(names.toString().replace(/,/g, "\n"));
    # url = 'https://mxtoolbox.com/SuperTool.aspx?action=arin%3a[xxxx]&run=toolpage'
    urlX = 'http://whois.arin.net/rest/nets;q=[IP]?showDetails=true&showARIN=false'
    resultsFile = 'D:\\tech\\hosts\\MSI\\temp\\whoishere.txt'
    
    if _.switches.isActive('IP'):

        do = 'call nb2 ' + _.switches.value('IP') + ' > ' + resultsFile
        os.system('"' + do + '"')
        f = open(resultsFile, 'r')
        s = f.read()
        tree = html.fromstring(s)
        tables = tree.cssselect('orgRef')
        print((tables[0].attrib['name']))

    else:

        resultsFile = _v.techDrive + ':\\tech\\hosts\\MSI\\temp\\whoishere.txt'
        resultsLookupFile = _v.techDrive + ':\\tech\\hosts\\MSI\\temp\\whoishereLookup.txt'
        do = 'netstat -n > ' + resultsFile
        os.system('"' + do + '"')
        results = _.getText(resultsFile)

        data = []
        for r in results:
            r = r.replace('\n','')
            r = _str.replaceDuplicate(r,' ')
            r = _str.cleanBE(r,' ')
            if 'ESTABLISHED' in r:
                # print(r)
                x = r.split(' ')
                data.append(x[2].split(':')[0])
        lookup = 'nslookup [IP] >> ' + resultsLookupFile
        do = 'echo. > ' + resultsLookupFile
        os.system('"' + do + '"')
        dataSet = set(data)
        

        for ip in dataSet:
            do = 'call nb2 ' + ip + ' > ' + resultsFile
            os.system('"' + do + '"')
            f = open(resultsFile, 'r')
            s = f.read()
            tree = html.fromstring(s)
            tables = tree.cssselect('orgRef')
            print((tables[0].attrib['name']))
        print((len(dataSet)))
        # for ip in dataSet:
        #     os.system('"' + lookup.replace('[IP]',ip) + '"')

        # resultsLookup = _.getText(resultsLookupFile)
        # for r in resultsLookup:
        #     r = r.replace('\n','')
        #     r = _str.replaceDuplicate(r,' ')
        #     r = _str.cleanBE(r,' ')
        #     if 'Name:' in r:
        #         x = r.split(' ')
        #         print(x[1])



########################################################################################
if __name__ == '__main__':
    action()






