LPD Report
LPD Report
Elaborado por: Francisco Chainho Jos Ramos Nelso Ventura Docente: Dr. Jos Jasnau Caeiro
ndice
1 2 3 4 Introduo........................................................................................................................ 4 Anlise do Problema........................................................................................................ 5 Soluo Proposta Decises ao nvel da implementao ................................................6 Deteco de Hosts na rede local e respectivos portos abertos.........................................7 4.1 4.2 5 Bibliotecas utilizadas............................................................................................... 7 Cdigo...................................................................................................................... 7
6.1.1 6.2
6.2.1 6.3
6.3.1 6.3.2 7
Base de Dados com ORM.............................................................................................. 20 7.1 7.2 7.3 Bibliotecas utilizadas............................................................................................. 20 Cdigo.................................................................................................................... 20 Produo de Relatrios.......................................................................................... 23 BibliotecasUtilizadas..................................................................................... 23 Cdigo............................................................................................................ 23
7.3.1 7.3.2 8
Introduo
O principal objectivo passa pelo desenvolvimento de uma aplicao de segurana informtica que tenha como funo realizar vrias anlises de segurana. O desenvolvimento deve ser feito com recurso a uma Linguagem de Programao Dinmica, como o Python, de modo a permitir a obteno de conhecimentos de programao nesta mesma linguagem e de um modo geral, compreender melhor o funcionamento das linguagens de programao de Scripting. A estruturao da aplicao devera ter em ateno trs aspectos fundamentais: fazer um scan na rede local para detectar os hosts existentes e detectar quais os portos que esto abertos nos hosts detectados no scan; determinar as conexes activas na mquina local e fazer o processamento do ficheiro de logs de uma firewal. O funcionamento da aplicao ser dividido em duas partes: linha de comando e por interface grfica. Toda a informao produzida pela anlise de informao do ficheiro de Logs disponibilizada em ficheiros PDF e CVS. A informao tambm exportada para uma base de dados, de modo a que essa informao possa ser trabalhada de acordo com as necessidades. Como complemento para a aplicao foram includos na mesma a produo de mapas geogrficos com a localizao dos IPs, criao de grficos com estatsticas, base de dados assente em ORM. Para a autenticao na aplicao recorremos encriptao dos dados usando a cifra AES para garantir a segurana da informao.
Anlise do Problema
Foi proposta na cadeira de Linguagens de Programao Dinmicas a criao de uma aplicao de Segurana Informtica que responde-se s questes propostas. Analisamos cada uma das questes de forma a dividir o problema principal em pequenos problemas. Analisando as solues existentes, definimos quais as melhores bibliotecas a utilizar com base em dois critrios: facilidade de implementao e documentao disponibilizada.
Para facilitar o desenvolvimento da aplicao, dividimos a aplicao em pequenos programas, como por exemplo a criao de mapas, criao de PDF, criao de grficos, etc. Foram construdos esses pequenos mdulos de modo serem facilmente implementados numa nica aplicao.
Para a criao dos relatrios em PDF, foi utilizada a biblioteca ReportLab e tendo como base dos exemplos encontramos, optamos por seguir as indicaes que esto no manual, fazendo alteraes de modo ir ao encontro das nossas preferncias.
Para a base de dados com ORM, a implementao recaiu na compreenso dos dados que estavam nos Logs da Firewall e criar classes que correspondam s tabelas necessrias.
A deciso de utilizar os ficheiro KML para a visualizao dos IPs, assentou em ter dois modos para visualizar essa informao. Tendo os ficheiros KML gerados, possvel visualizar pelo browser no GoogleMaps a posio relativa aos IPs. Para visualizar a posio dos IPs no mapa, optamos por abandonar a ideia inicial de enviar a informao para o servidor da Google por dificuldades de implementao, optado assim por enviar os ficheiros por FTP para outro servidor, sendo possvel ento a visualizao dos ficheiros KML atravs de um link de acesso a esses mesmos ficheiros.
Este script pretende mostrar ao utilizador quais os hosts que se encontram na sua rede, fazendo tambm uma avaliao dos portos abertos com Multithreads dos hosts encontrados. Este script encontra-se no ficheiro network_port_scan.py.
4.1
Bibliotecas utilizadas
Para realizar este script, foi necessrio recorrer utilizao de diferentes bibliotecas. So elas: Nmap Biblioteca que ajuda o programador a usar o port scanner nmap. Para instalar esta biblioteca necessrio seguir os passos listados em: http://xael.org/norman/python/python-nmap/ Socket Este mdulo permite acesso interface de sockets BSD. Sys Este mdulo permite o acesso a algumas variveis utilizadas pelo interpretador. Threading Modulo que permite a utilizao de mltiplas threads. Queue Modulo utilizado na programao com threads.
4.2
Cdigo
O ficheiro que alberga o cdigo para deteco de Hosts e respectivos portos abertos, encontra-se em network_port_scan.py. Este script ir comear por detectar quais os hosts que se encontram na rede, ficando a cargo da funo host_scann(). () def host_scann(): nm = nmap.PortScanner() ip = raw_input("\nIndique o intervalo de IPs (ex: 192.168.1.1/24): ") print "\n-- Network Host Scan --\n" nm.scan(ip) lista_hosts = [] for host in nm.all_hosts():
7
lista_hosts.append(host) str_hosts = ' '.join(lista_hosts) print("IP: %s | Status: %s" % (host, nm[host].state())) print "\nNumero de mquinas detectadas: ",len(nm.all_hosts()) print "\n-- Fim do Network Host Scan --\n" return lista_hosts () Ao correr o programa, ir ser pedido ao utilizador que insira um intervalo de IPs a serem inspeccionados pelo scanner. O scanner ir percorrer esse intervalo de IPs e os hosts detectados na rede vo ser guardados numa lista denominada lista_hosts. A funo port_scan() ir obter a lista de hosts passada por parmetro e ser nesta funo que sero detectados os portos abertos nos hosts detectados no scan efectuado rede. Ser no portscan que iro ser usadas as multithreads. O portscan ir apenas inspeccionar o intervalo de portos 1-1024 como visvel no cdigo abaixo. () for host in hosts_list: nthreads = MAX_THREADS toscan = Queue.Queue() scanned = Queue.Queue() scanners range(nthreads)] start = 1 stop = 1024 for scanner in scanners: scanner.start() hostports = [(host, port) for port in xrange(start, stop+1)] for hostport in hostports: toscan.put(hostport) ()
8
[port_Scanner(toscan,
scanned)
for
in
Este script pretende mostrar ao utilizador quais as conexes UDP e TCP que se encontram activas na sua mquina. 1
5.1 Cdigo
O ficheiro que alberga o cdigo para detectar as conexes UDP e TCP activas, encontra-se em conexes_activas.py. Este script ir mostrar ao utilizador quais as conexes UDP e TCP activas na sua mquina local atravs da consulta s imagens de duas tabelas relativas aos dois tipos de comunicaes. Estes ficheiros esto localizados em /proc/net/udp para UDP e /proc/net/tcp para TCP. () def _load(self): with open(self.PROC_TCP,'r') as f: content_tcp = f.readlines() content_tcp.pop(0) with open(self.PROC_UDP,'r') as f: content_udp = f.readlines() content_udp.pop(0) ()
https://github.com/stalexan/netstat-monitor/blob/master/netstat.py
10
6.1.1
Re Expresses regulares para encontrar os padres de informao pretendidos. Pygeoip API para fornecer informaes relativas aos IPs, como por exemplo, pases, regies, cidades, organizaes, entre outras. Csv Mdulo para ler e criar ficheiros CSV.
Cdigo
O ficheiro que alberga o cdigo para processamento dos Logs da Firewall encontra-se no ficheiro firewall_logs.py. Este script comea por fazer uma pesquisa com expresses regulares do padro src=ip e dst=ip para se obterem os IPs de source e de destino respectivamente. Esta pesquisa acontece dentro da funo pesquisa_ip(). A informao recolhida inserida em duas listas distintas. J com as listas contendo os diferentes IPs, so criadas duas funes:
trata_lista_ip_entrada() e trata_lista_ip_saida() que vo receber por parmetro as listas anteriormente criadas. Dentro destas funes, vo ser filtrados os IPs para que sejam criadas duas listas em no se repitam e apenas aparea um registo de cada IP. Estas duas listas vo ser utilizadas para gerar os ficheiros KML e informao relativa origem de cada IP. () def pesquisa_ip(): for linha in logs: pesquisa_ip_saida = re.search("dst=(.+?) ", linha) if pesquisa_ip_saida: ips_saida = pesquisa_ip_saida.group(1) lista_ip_saida.append(ips_saida) ()
re.findall(r"[0-9]+(?:\.[0-9]+){3}",
lista_ips = [ip_base + str(k) for k in range(256)] for x in lista_ips: while x in lista_ip_entrada_set: lista_ip_entrada_set.remove(x) return lista_ip_entrada_set () Nesta ltima funo, definiu-se uma varivel ip_base para que se retirasse os IPs locais das listas de dados, ficando apenas registo de IPs externos rede.
As listas com os IPs e pases de origem so criadas recorrendo ao Pygeoip. Os ficheiros CSV so criados com listas de informao, criado um ficheiro CSV com esta lista de informao. () lista_paises_saida = [] for x in lista_ip_saida_set: lista_paises_saida.append(gi.country_code_by_name(x))
csv_ip_saida = open("csv_ip_saida.csv", "wb") csv_ip_saida_write = csv.writer(csv_ip_saida) csv_ip_saida_write.writerow(["IPs de sada", "Paises de destino"]) for rows in zip(lista_ip_saida_set, lista_paises_saida): csv_ip_saida_write.writerow(rows) () Estas listas de informao tambm vo servir para gerar PDFs com a informao recolhida.
12
Outro dos objectivos pretendidos era o de criar grficos com estatsticas com o objectivo de se ter uma percepo visual de alguns parmetros importantes. Foram criados dois grficos e guardados em ficheiros PDF relativos ao numero de registos dos IPs e protocolos mais utilizados. () lista_ips_num_src = [] for ip_src in lista_ip_entrada: numero_ips_src = lista_ip_entrada.count(ip_src) while ip_src not in lista_ips_num_src: lista_ips_num_src.append(ip_src) lista_ips_num_src.append(numero_ips_src)
lista_conjunto_ips_src = [] lista_conjunto_num_src = [] contador = 0 for i in lista_ips_num_src: if contador==1: lista_conjunto_ips_src.append(i) contador = 0 else: lista_conjunto_num_src.append(i) contador = 1
13
Como referido anteriormente, o script ir recolher informaes como IPs de origem, IPs de destino, datas, horas, portos e protocolos de acesso. Essa informao capturada dentro da funo info_ip_local(). Dentro desta funo ser gerado um ficheiro CSV e PDF com as informao pretendidas. Na funo anterior eliminamos os IPs locais da rede, nesta caso iremos apenas restringir a informao aos IPs locais.
6.2 Relatrios
6.2.1 Bibliotecas Utilizadas
Para a elaborao dos relatrios em formato PDF recorremos a uma biblioteca em Python chamada de ReportLab, a escolha recaiu nesta biblioteca devido a sua flexibilidade e facilidade para a criao e a automatizao na criao de documentos em PDF desde os mais simples aos mais complexos.
O Funcionamento do ReportLab consiste em desenhar as paginas em PDF com recurso a um motor de criao de Layout de paginas, o Platyplus Page Layout and TYPography Using Scripts, que constri os documentos a partir de componentes como ttulos, pargrafos, fontes, tabelas, imagens e grficos.
- uma API grfica que permite desenhar paginas em PDF e adicionar ao documento muitas caractersticas dos documentos em PDF; - Grficos e uma biblioteca widgets para a criao de grficos; - Um motor para criar layouts flexveis Platyplus.
6.3
Cdigo
O objectivo passa pela criao de 3 ficheiros PDF, info_acessos.pdf, origem_ip_entrada.pdf e origem_ip_saida.pdf. O primeiro passo a
14
construo da estrutura do documento PDF definindo um template, onde ser desenhado os titulo, linhas imagens. ... canvas.drawImage(self.logo, 12.5*cm,23.5*cm,width=6*cm,height=4*cm) canvas.setFont("Times-Roman", 20) canvas.drawString(2.7*cm,22.3*cm,"Informao da Rede") canvas.rect(2*cm,2*cm,17.1*cm,26*cm, fill=0) ... doc = BaseDocTemplate("info_acessos.pdf", pagesize=A4) exemplo
Ao template vamos adicionar uma Frame, que tem como funo ser a zona do documento onde escrita a informao que vem da Lista. A particularidade desta Frame a seguinte, ao escrever a informao na Frame ao fim da zona que esta definida para ser escrito a informao automaticamente cria um novo PDF onde escrita a restante informao contida na lista. ... frame = Frame(
onPage=self.Pagina) doc.addPageTemplates(template) ... O processo de escrita da informao bastante simples, passa por percorrer a lista e adicionar o seu contedo a uma lista que adicionada a uma lista que compilada para ser inserida na Frame ... for i in lista: bogustext = (i)
15
p = Paragraph(bogustext, style) Story.append(p) Story.append(Spacer(2,0.2*cm)) doc.build(Story) . O processo numa viso mais simplificada, passa por receber a informao que pretendemos por uma lista e adicionar essa informao ao PDF.2
6.3.1
Bibliotecas Utilizadas
Para a elaborao dos Mapas Geogrficos utilizamos varias bibliotecas para cada um dos procedimentos que necessrio realizar. Vamos separar por procedimentos para melhor explicar todo o processo de elaborao dos Mapas.
Criao dos ficheiro KML Para a criao dos ficheiros KML com a informao dos IP utilizamos a biblioteca pygeoip e a simplekml. A biblioteca pygeoip permite atravs do cruzamento do IP com a a informao da base de dados e identificar o local de acesso do IP. Fornece informao sobre o pais, cidade, regio, latitude e longitude. A biblioteca simplekml uma biblioteca em python que permite gerar ficheiro kml, a grande vantagem e que Evita ter de perceber o funcionamento dos ficheiros KML o que resulta numa poupana de tempo. Apresenta uma grande variedade de funes que permitem configurar o ficheiro KML.
Upload de ficheiro KML Para o envio de ficheiros para o servidor utilizamos o biblioteca de python ftplib. Esta biblioteca implementa a ligao entre do cliente e o servidor pelo protocolo FTP, automatizando o processo de envio de ficheiros para o servidor
16
Para abrir o link que corresponde endereo vamos recorrer a uma biblioteca em Python designada por webbrowser. A biblioteca webbrowser fornece uma interface de alto nvel para exibir documentos na web, o que a torna fcil de utilizar bastando passar por argumento o endereo que se pretende abrir
6.3.2
Cdigo
O procedimento para gerar os ficheiros KML, consiste em passar como paramento o endereo IP para dentro da funo gip.record_by_name(p) de biblioteca pygeoip que retorna uma lista com a informao referente ao IP. Para solucionar o problema dos IP que no esto na base de dados e feito uma validao a dimenso do retorno da lista ou seja quando o retorno tiver uma dimenso 0 esse IP e descartado no sendo includo no ficheiro KML. No ficheiro KML vai ser inserir o IP com a longitude e latitude atravs da funo newpoint() da biblioteca simplekml. Como vamos ter dois ficheiros kml um para os IP de entrada outro para os IP de Sada e feita uma validao com base no tipo de lista que passada por parmetro. Cada ficheiro que gerado tem um nome nico para solucionar o problema encontrado no refresch do GoogleMaps. ... kml = simplekml.Kml() for p in listaIP: rec = gip.record_by_name(p) if len(rec) == 0: print p, " - IP Desconhecido" else: longitude = rec['longitude'] latitude = rec['latitude'] location = [rec['city'],rec['region_name'], rec['country_name']] long_lat = [rec['longitude'],rec['latitude']] p = kml.newpoint(name = p, coords=[(rec['longitude'], rec['latitude'])])
17
now = datetime.datetime.now() if a == 0: fileName="in_ip_%s%s%s.kml" now.second) else: fileName="out_ip_%s%s%s.kml" now.second) kml.save(fileName) return fileName ... Para o ulpoad dos ficheiros para o servidor seguimos o seguinte procedimento: - fazemos o login ao servidor - abrir o ficheiro KML com os ip de entrada - enviamos em formato binrio o contedo do ficheiro - abrir o ficheiro KML com os ip de sada - enviamos em formato binrio o contedo do ficheiro - fechamos a ligao ao servidor - fechamos os ficheiro. ... try: ftp = ftplib.FTP('ftp.mapas.freeserver.me') ftp.login('u970507521','melides007') f = open(fileName_entrada,'rb') % (now.month,now.minute, % (now.month,now.minute,
ftp.storbinary('STOR '+fileName_entrada,f,1024) f = open(fileName_saida,'rb') ftp.storbinary('STOR '+fileName_saida,f,1024) except ftplib.all_errors: print 'Erro no Login para o Servidor FTP'
18
except IOError: print 'Erro na abertura do Ficheiro' else: ftp.quit() f.close() print "Ficheiro enviado para o servidor" ...
Para abrir o endereo corresponde-te da cada ficheiro KML utilizamos a passagem por parmetro do nome do ficheiro ao qual e adicionado o endereo do GoogleMaps e do servidor que contem os ficheiros KML. webbrowser.open_new('https://maps.google.com/maps?q=http://map as.freeserver.me/'+fileName_entrada)
webbrowser.open_new('https://maps.google.com/maps?q=http://map as.freeserver.me/'+fileName_saida)
...
19
A utilizao de ORM vem simplificar a utilizao de comandos SQL, atravs da utilizao de uma interface de programao que faz essa parte. Sendo as tabelas criadas atravs da definio de Classes e os registos de cada tabela atravs de instancias de cada classe correspondente.
O SQLAlchemy considera a base de dados de uma forma diferente, e vista como um sistema relacional e no um coleco de tabelas, apresentado um mtodo de relacionar atravs de classes em Python com as tabelas da Base de Dados. Inclui um sistema que sincroniza todas as alteraes entre os objectos e as colunas, para as consultas a base de dados existe um sistema de expresses em funo das classe definidas pelo programador.
7.2 Cdigo
O procedimento inicial passa por efectuar a ligao a uma base de dados que suporte ORM, foi escolhida o SQLite. Sendo o processo simplificado atravs da indicao do nome da base de dados e com a criao de sesso de ligao. try: """ Testa a ligao a Base Dados """ print "\n-- Ligao ao SQLLite -- \n" engine = create_engine('sqlite:///database') Session = sessionmaker(bind=engine)
20
session = Session() except: print "ERRO - Falhou na ligao ao SQLite - " exit(0)
Para criao das tabelas definiu-se as classes ... class IPSaida(Base): """ Constroi a tabela InSaida @author: Francisco Chainho, Nelso Ventura,Jose Ramos @version: 0.1 @file DataBase.py @date: 15-04-2013 """ __tablename__ = 'IPSaida' id = Column(Integer, Sequence("IPSaida_id_seq"),primary_key=True) ip_destino = Column(String) paises = Column(String) def __init__(self,ip_destino,paises): self.ip_destino = ip_destino self.paises = paises
(self.ip_destino,self.paises)
21
Para criar as tabelas ... Base.metadata.create_all(engine) ... Como exemplo de um acesso a base de dados temos so seguinte codigo. Uma forma simples de apagar toda a informao da tabela sem recorer a comandos SQL. ... def apaga_ip_saida(): """ Apaga a Informao da tabela IPSaida """ # Apagar dados for all in session.query(IPSaida).all(): session.delete(all) session.commit() ... O processo de introduo de informao nas tabelas semelhante, recebendo por parmetro as variveis que so introduzidas. A facilidade com se faz todas as operaes facilita a programao porque.... def insere_info_ip(ip_origem,ip_destino,data,hora,protocolo,porto): """ Insere informao na tabela InfoIP
@param ip_origem: IP de origem @param ip_destino: IP de destino @param data: Data @param hora: Hora
22
@param protocolo: Protocolo @param porto: Porto """ session.add(InfoIP(ip_origem,ip_destino,data,hora,protocolo,porto)) session.commit() ...
Para a elaborao dos relatrios em formato PDF recorremos a uma biblioteca em Python chamada de ReportLab, a escolha recaiu nesta biblioteca devido a sua flexibilidade e facilidade para a criao e a automatizao na criao de documentos em PDF desde os mais simples aos mais complexos. O Funcionamento do ReportLab consiste em desenhar as paginas em PDF com recurso a um motor de criao de Layout de paginas, o Platyplus Page Layout and TYPography Using Scripts, que constri os documentos a partir de componentes como ttulos, pargrafos, fontes, tabelas, imagens e grficos. A biblioteca implementa trs camadas principais: - uma API grfica que permite desenhar paginas em PDF e adicionar ao documento muitas caractersticas dos documentos em PDF; - Grficos e uma biblioteca widgets para a criao de grficos; - Um motor para criar layout flexiveis Platyplus.
7.3.2
Cdigo
objectivo
passa
pela
criao
de
ficheiros
PDF,
info_acessos.pdf,
23
estrutura do documento PDF definindo um template, onde ser desenhado os titulo, linhas imagens.
...
canvas.drawImage(self.logo, 12.5*cm,23.5*cm,width=6*cm,height=4*cm) canvas.setFont("Times-Roman", 20) canvas.drawString(2.7*cm,22.3*cm,"Informao da Rede") canvas.rect(2*cm,2*cm,17.1*cm,26*cm, fill=0) ... doc = BaseDocTemplate("info_acessos.pdf", pagesize=A4)
exemplo
Ao template vamos adicionar uma Frame, que tem como funo ser a zona do documento onde escrita a informao que vem da Lista. A particularidade desta Frame a seguinte, ao escrever a informao na Frame ao fim da zona que esta definida para ser escrito a informao automaticamente cria um novo PDF onde escrita a restante informao contida na lista. ... frame = Frame( 2.5*cm,3*cm,16*cm,15.5*cm,id='frame',showBoundary=1 ) template = PageTemplate(id='test', frames=frame, onPage=self.Pagina) doc.addPageTemplates(template)
...
24
O processo de escrita da informao bastante simples, passa por percorrer a lista e adicionar o seu contedo a uma lista que adicionada a uma lista que compilada para ser inserida na Frame ... for i in lista: bogustext = (i) p = Paragraph(bogustext, style) Story.append(p) Story.append(Spacer(2,0.2*cm)) doc.build(Story) . O processo numa viso mais simplificada, passa por receber a informao que pretendemos por uma lista e adicionar essa informao ao PDF.
25
criada dentro do ficheiro aes_cript.py uma classe Cifra que contm duas funes: encode() e decode(). class cifra: def __init__(self,chave): tamanho_bloco = 32 padding = '{' pad = lambda s: s + (tamanho_bloco - len(s) % tamanho_bloco) * padding self.EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) self.DecodeAES = lambda c, e:
http://www.codekoala.com/blog/2009/aes-encryption-python-using-pycrypto/
26
c.decrypt(base64.b64decode(e)).rstrip(padding) self.secret = chave self.cipher = AES.new(self.secret) def encode(self,string): encoded = self.EncodeAES(self.cipher, string) return encoded def decode(self,encoded): decoded = self.DecodeAES(self.cipher, encoded) return decoded
Na funo encode(), passado por parmetro a string a encriptar, enquanto que na funo decode() passado por parmetro a varivel com a password cifrada a ser decifrada. A adicionar a esta seco do programa, junta-se a parte de login da aplicao situada no ficheiro sql_login_encript.py. Neste ficheiro usado o seguinte mdulo: Sqlite3 Gestor de Base de Dados
Este ficheiro ir gerir toda a base de dados relativa ao Login. O utilizador no menu da aplicao, tem a possibilidade de apagar toda a base de dados, bem como inserir novos valores. def createBLOB(self): connection = sqlite3.connect(self.database) cursor = connection.cursor() stmt = ('''CREATE TABLE if not exists "chave_aes"(id INTEGER PRIMARY KEY AUTOINCREMENT, chave BLOB)''') cursor.execute(stmt) connection.commit() connection.close()
27
O exemplo de cdigo acima transcrito mostra a funo createBLOB() que ir criar a tabela chave_aes. Nesta tabela, o campo que vai guardar a chave do tipo BLOB.
28
9 Interface Grfica
Para criar a interface grfica utilizamos a ferramenta Glade4, associada ao Quikly5, quenospermitiucriaratravsdeumaAPI(ApplicationProgrammingInterface)toda aestruturacomoobjectivodetornaraaplicaomaisfcildeutilizar.
No excerto de cdigo abaixo transcrito podese ver a funo que permite inicializar ainterfaceassimcomocriarainteracodaaplicaocomoutilizador. def finish_initializing(self, builder): # pylint: disable=E1002 super(LpdinterfaceWindow, self).finish_initializing(builder) self.AboutDialog = AboutLpdinterfaceDialog self.PreferencesDialog = PreferencesLpdinterfaceDialog
4 5
http://wingware.com/doc/howtos/pygtk?gclid=CM3Zwr3r1LYCFfQetAodGEcANg https://wiki.ubuntu.com/Quickly#Installation
29
def on_refreshbutton_clicked(self, widget): self.ip_label.set_text(self.entry_ip.get_text()) ip = self.entry_ip.get_text() print ip Com o intuito de facilitar na utilizao da aplicao, um dos nossos objectivos passou por mostrar automaticamente e no incio da aplicao, toda a informao disponveldaredeemqueaferramentaestligada. O prximo excerto de cdigo permite mostrar ao utilizador, na linha de comando, essainformao; def header(): call('reset') print "[*] Aguarde ........\n" print "############Dados_Ligacao_Actual###################\n"
30
cod
urllib2.urlopen('http://www.yougetsignal.com/tools/network-
location/php/get-network-location-json.php').read() # captura o codigo fonte dados = json.loads(cod) # carregamos no json dic = {'status':'Status', 'ipAddress':'Endereco IP', 'hostname':'Nome do host', 'baseDomain':'Dominio', 'countryCode':'Codigo', 'countryName':'Pais', 'city':'Cidade', 'latitude':'Latitude', 'longitude':'Longitude', 'areaCode':'Codigo de area', 'postalCode':'Codigo postal'} for i in dic: print dic[i], json.dumps(dados[i]) # lengenda+informacao print "###################################################\n" header() def getNetworkIp(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
31
Recorremos ao site you get signal6 que uma ferramenta de localizao de rede, e umutilitrioqueseaproximaemostraalocalizaogeofsicadonossoendereode redenummapadoGoogle.
http://www.yougetsignal.com/tools/network-location/
32
servidor. A definio da forma como a informao ia ser escrita em varias pginas, mantendoomesmolayoutnasvriaspaginasondeseinseriaainformao.Parasolucionar esse problema adicionamos uma Frame onde escrita a informao. Outra dificuldade passou por definir a forma como se ia construir o cdigo, porque nas pesquisas que realizamos encontramos varias forma de fazer os mesmos procedimentos para a criar o PDF.
34
10 Trabalho futuro
Rever algumas classes e funes da aplicao assim como adicionar novas classes para tornar o cdigo mais estruturado. Melhorar a interaco da aplicao grfica com os dados do ficheiro de logs da firewall, assim como dos mapas de IPs.
35
11 Concluso
A elaborao deste projecto permitiu-nos aumentar os conhecimentos no que respeitante as linguagens de programao dinmicas nomeadamente a linguagem de programao python. No decorrer da elaborao do projecto e do relatrio foram verificadas algumas dificuldades, que acabaram por ser ultrapassadas sem grandes constrangimentos. A aplicao desenvolvida foi construda na linguagem Python, destina-se a detectar portos de rede de vrias mquinas, que se encontram disponveis numa determinada rede local, determinar que conexes se encontrem activas numa determinada mquina, processar os ficheiros de log das firewall locais tentando obter informao sobre tentativas de acesso, nomeadamente listas de origem por pas, data e horas de tentativas de acesso, assim como outras informaes. A ferramenta foi projectada para uso em linha de comando apoiada por uma interface grfica. A aplicao esta apta a gerar relatrios em PDF, CSV, grficos com estatsticas e mapas geogrficos, tem a vantagem de processar informao baseada em ORM de e para uma base de dados SQL, assim como uma autentificao personalizada com encriptao de dados. Acreditamos ter cumprido todos os objectivos inicialmente propostos.
36
12 Bibliografia
http://docs.sqlalchemy.org/en/rel_0_8/index.html Release: 0.8.0 | Release Date: March 9,2013 http://www.slideshare.net/brunogamacatao/python05 Python 05 by Bruno Cato on Sep 26,2012 http://jucacrispim.wordpress.com/2009/12/07/pequenaintroducaoaosqlalchemy/ PequenaintroduoaosqlalchemyJucaCrispimdezembro7,2009 http://www.slideshare.net/ramiroluz/sqlalchemyamagiadomapeamentoobjeto relacionalpresentation SQLAlchemy A magia do mapeamento objeto relacional. by RamiroBatistadaLuzonOct23,2008 http://mapfish.org/doc/tutorials/sqlalchemy.htmlSQLAlchemytutorial http://www.rmunn.com/sqlalchemytutorial/tutorial.html A stepbystep SQLAlchemy tutorial http://pt.wikipedia.org/wiki/Mapeamento_objetorelacional relacionalde23demarode2013 http://code.google.com/p/pygeoip/wiki/UsagepygeoipUpdatedSep22,2011 http://dev.maxmind.com/geoip/install/city#Step_3__Query_database2 GeoIP City DatabaseInstallationInstructions https://pypi.python.org/pypi/pygeoip/pygeoip0.2.6 http://simplekml.readthedocs.org/en/latest/genindex.html# simplekml documentation 2012,KyleLancaster http://code.google.com/p/simplekml/ A python package for creating basic KML 16 December2012 http://docs.python.org/2/library/webbrowser.html webbrowser Convenient Web browsercontroller http://effbot.org/librarybook/ftplib.htmTheftplibmoduleIainDuncan(20070111) Mapeamento objeto
37
http://docs.python.org/2/library/ftplib.html#ftptlsobjectsftplibFTPprotocolcliente http://mail.python.org/pipermail/tutor/2006November/050895.html paulino1 at sapo.pt paulino1atsapo.ptMonNov1320:40:55CET2006 http://www.reportlab.com/docs/reportlabuserguide.pdf ReportLab PDF Library User GuideReportLabVersion2.6 git.alucinados.com/?p=openticket.git;a=patch;h=3a9384ee38dd18287c48a05660bfdaaa622 b24a7From:MarceloJorgeVieira(metal)[email protected]:Thu,16Apr2009 00:47:480300 Violent Python A Cookbook for Hackers, Forensic Analysts, Penetration Testers and SecurityEngineers,TJ.OConnor
38