Bruno Rodrigues Pacheco Gentil Gomes da Silveira Neto · WiFind - software de monitoramento para...
Transcript of Bruno Rodrigues Pacheco Gentil Gomes da Silveira Neto · WiFind - software de monitoramento para...
Universidade Federal Fluminense
Escola de Engenharia
Curso de Graduacao em Engenharia de
Telecomunicacoes
Bruno Rodrigues Pacheco
Gentil Gomes da Silveira Neto
WiFind - software de monitoramento para redes Wi-Fi
Niteroi – RJ
i
Bruno Rodrigues Pacheco
Gentil Gomes da Silveira Neto
WiFind - software de monitoramento para redes Wi-Fi
Trabalho de Conclusao de Curso apresentado ao
Curso de Graduacao em Engenharia de Teleco-
municacoes da Universidade Federal Fluminense,
como requisito parcial para obtencao do Grau de
Engenheiro de Telecomunicacoes.
Orientador: Prof. Dr. Luiz Claudio Schara Magalhaes
Niteroi – RJ
2017
ii
.
.
iii
Bruno Rodrigues Pacheco
Gentil Gomes da Silveira Neto
WiFind - software de monitoramento para redes Wi-Fi
Trabalho de Conclusao de Curso apresentado ao
Curso de Graduacao em Engenharia de Teleco-
municacoes da Universidade Federal Fluminense,
como requisito parcial para obtencao do Grau de
Engenheiro de Telecomunicacoes.
Aprovado em 14 de Dezembro de 2017.
BANCA EXAMINADORA
Prof. Dr. Luiz Claudio Schara Magalhaes - Orientador
Universidade Federal Fluminese - UFF
Prof. Dr. Natalia Castro Fernandes
Universidade Federal Fluminense - UFF
Prof. Dr. Ricardo Campanha Carrano
Universidade Federal Fluminense - UFF
Niteroi – RJ
2017
iv
Resumo
Este projeto descreve o desenvolvimento de um software que serve como ferramenta
de analise e monitoramento de redes Wi-Fi na banda de 2,4 GHz. Com a funcao de analisar
as potencias recebidas de todas as redes sem fio do ambiente de todos os pontos de acesso,
o software pode auxiliar no dimensionamento de novas redes, alem de ajudar a identificar
possıveis melhorias nas configuracoes atuais, a fim de conseguir um melhor desempenho
da rede. Para facilitar a analise do ambientes, o software ainda e capaz de gerar um
arquivo em PDF com os graficos de potencias recebidas que foram gerados dos diferentes
pontos de acesso ao longo do tempo.
Palavras-chave: Wi-Fi. Rede sem fio. Software. Graficos em Tempo Real. RSSI.
Potencia Recebida. Python.
v
Abstract
This project describes the development of a Wi-Fi analyzer software witch works
in 2.4GHz band. The main feature is analyzing received power of all wireless environment
Acess Points. The sotware can assistance, therefore, besides dimensioning new Wi-Fi
networks projects, pinpoint improvements in the current settings for better network per-
formance. In order to facilitate the environment analysis, the software is still capable of
generating a PDF file with the received power graphs of the differents acces points, over
time.
Keywords: Wi-Fi. Wireless. Software. Real Time Plotting. RSSI. Received Power.
Python.
vi
A tecnologia como ferramenta social, que jus-
tifique seu avanco agregando pessoas e des-
centralizando oportunidades. Por um futuro
menos desigual.
vii
Agradecimentos
A Deus, no qual estao escondidos todos os tesouros da sabedoria, que nos permite
contemplar e entender fragmentos de sua infinita criacao atraves da ciencia.
As nossas famılias, pelo carinho, apoio e educacao nos dada apesar das dificuldades.
As nossas namoradas, pela forca e incetivo natural que sao, afinal, e por um futuro
com elas que batalhamos.
Ao professo Luiz Claudio Schara, pelos ensinamentos que nos deram base para
elaboracao deste trabalho.
A professora Natalia, pelas dicas e pela disponibilidade quando precisamos.
Aos nossos amigos, por tornarem o dia a dia mais agradavel, facilitando nosso
desempenho.
A empresa Nimal Tecnologia, por ceder o espaco em horario comercial, para os
testes do nosso software.
viii
Lista de Figuras
1.1 Comparacao de usuarios Wi-Fi x telefonia movel.[2] . . . . . . . . . . . . . 2
2.1 Quadro Beacon, capturado pelo software Wireshkark. . . . . . . . . . . . . 5
2.2 Conceito de BSS e ESS.[4] . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Processos de Autenticacao e Associacao.[5] . . . . . . . . . . . . . . . . . . 8
2.4 Roaming.[6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Potencia x Taxa de Associacao, Data Sheet do ponto de acesso 7522 da
Extreme Networks.[7] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Canais Wi-Fi em operacao Brasil.[8] . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Canais da tecnologia DSSS.[9] . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.8 Canais de largura 20 MHz e 40 MHz da tecnologia OFDM.[10] . . . . . . . 15
3.1 Probe-request, Probe-response. Grafico Espacial . . . . . . . . . . . . . . . 17
3.2 Probe-request, Probe-response.Grafico Temporal [11] . . . . . . . . . . . . 18
4.1 Saıda do Comando iwlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 Arquivo Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 Widgets na Interface Grafica . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4 Menu de Opcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Apresentacao da Interface Grafica com a Captura dos Dados . . . . . . . . 42
4.6 Grafico do Arquivo em PDF . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1 Scan Geral de Todos os BSSIDs do ambiente . . . . . . . . . . . . . . . . . 49
6.2 Potencia recebida em todo ambiente analisado . . . . . . . . . . . . . . . . 50
6.3 Potencia recebida em ao longo do tempo em PDF, ponto de acesso 1 . . . 50
6.4 Potencia recebida em ao longo do tempo em PDF, ponto de acesso 2 . . . 51
6.5 Potencia recebida em ao longo do tempo em PDF, ponto de acesso 3 . . . 51
Sumario
Resumo iv
Abstract v
Agradecimentos vii
Lista de Figuras viii
1 Introducao 1
2 Padrao IEEE 802.11 3
2.1 Elementos de uma WLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 Ponto de Acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Estacoes Moveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Operacoes de uma WLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 Deteccao do Sinal das Redes Sem Fio de Forma Passiva . . . . . . . 4
2.2.2 Processos de Associacao e Desassociacao . . . . . . . . . . . . . . . 6
2.3 Potencia de Recepcao x Taxa de Associacao . . . . . . . . . . . . . . . . . 9
2.3.1 RSSI e Potencia de Recepcao . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Taxa de Associacao . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Banda ISM de 2,4 GHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.1 Especificacoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Probe-request, Probe-response 16
4 Desenvolvimento do Software 19
4.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.1 Programa iwlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
ix
x
4.1.2 O Programa gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.1 Descricao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.2 Bibliotecas Utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Explicacao do Codigo Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.1 Utilizacao de Orientacao a Objetos . . . . . . . . . . . . . . . . . . 27
4.3.2 Construcao da Interface . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.3 Captura dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.4 Plotagem dos Graficos . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3.5 Geracao do Relatorio . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5 Aplicacoes 45
5.1 Aplicacoes do Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6 Testes em Ambiente Operacional 47
6.1 Descricao do Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2 Resultados dos Testes e Possıveis melhorias . . . . . . . . . . . . . . . . . . 48
7 Conclusao e Trabalhos Futuros 52
7.1 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.2 Sugestoes para Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . 53
Referencias Bibliograficas 54
Capıtulo 1
Introducao
A demanda por mobilidade dos equipamentos de comunicacao e crescente e tais
equipamentos fixos e robustos estao cada vez menos presentes na sociedade, dando lugar
a outros que podem ser transitados dinamicamente mantendo a mesma conectividade.
Esses equipamentos exercem papeis fundamentais para a sociedade de hoje, seja
como ferramenta de trabalho, como meio de comunicacao, ou apenas para lazer.
Presente hoje em nosso dia a dia, essa mobilidade so foi alcancada com o desen-
volvimento de tecnologias que conseguiram fazer com que o espaco livre e compartilhado
fosse capaz de ser menos desigual em relacao aos meios confinados e exclusivos. Dentre
essas tecnologias que impulsionaram a mobilidade, podemos destacar: o 3G e o 4G da
telefonia movel, e as redes Wi-Fi. Estas tecnologias sao os principais responsaveis por
estas mudancas.
De acordo com pequisa realizada pela Cetic.br, o Wi-fi passou, em 2015, a ser a
rede de conexao preferida dos brasileiros, como pode ser vista no grafico da Figura 1.1.
Tendo em vista essa crescente demanda pela rede Wi-Fi, o presente trabalho visa
a elaboracao de um software que serve de ferramenta para o estudo dos ambientes que
recebem ou receberao esta rede. Ao longo deste, serao abordados todos os temas julgados
necessarios, o desenvolvimento e a aplicacao do software.
Nos Capıtulos 2 e 3, toda a parte teorica que embasa e justifica o desenvolvimento
do software e abordada. Protocolos, meios fısicos e praticas da comunicacao da rede sem
fio sao detalhados, dedicando um unico capıtulo a abordagem do mecanismo de Probe-
request, Probe-response, que age como objeto principal para o estudo do ambiente Wi-Fi
e e a principal ferramenta do protocolo IEEE 802.11 utilizada no desenvolvimento do
2
Figura 1.1: Comparacao de usuarios Wi-Fi x telefonia movel.[2]
software.
O Capıtulo 4 discorre sobre o programa em si. No inıcio do capıtulo, sao descritos:
a linguagem utilizada com suas bibliotecas e modulos; o Sistema Operacional para o qual
o software foi desenvolvido e as ferramentas que o mesmo proporciona para o desenvolvi-
mento. Na parte central do capıtulo, descrevemos a construcao do software e algoritmos
utilizados. No fim, sao descritas as situacoes em que o software pode ser aplicado.
O Capıtulo 5 descreve as aplicacoes que justificaram a criacao do software.
O Capıtulo 6 descreve e apresenta o resultado de um teste realizado com o software
para o estudo de um ambiente que ja possui redes Wi-Fi operantes.
Por fim, o Capıtulo 7 apresenta a conclusao do trabalho e faz sugestoes para tra-
balhos futuros que possam ser acrescentados no escopo desta ferramenta.
Capıtulo 2
Padrao IEEE 802.11
O IEEE (Institute of Electrial and Eletronics Engineers) e uma entidade nao-
governamental que une profissionais de diversas areas das engenharias eletrica e eletronica
para o desenvolvimento de padroes. O objetivo e criar e incentivar a interoperabilidade
dos equipamentos e dispositivos. Dentro do IEEE sao criados grupos de trabalho para
estudar e desenvolver padroes para um tipo de tecnologia.[3]
O grupo de trabalho IEEE 802.11 e responsavel por estabelecer os padroes da
entidade IEEE que regulamenta a base da comunicacao sem fio em WLANs (Wireless
Local Area Network) e de todos os equipamento que operam neste tipo de rede. Este
grupo desenvolveu um padrao que e conhecido pelo mesmo nome do grupo de trabalho.
Neste trabalho e tido como referencia o padrao lancado pelo IEEE em 2012, co-
nhecido como IEEE 802.11-2012. Todas as vezes que o padrao IEEE 802.11 for citado no
texto, estara fazendo referencia ao padrao de 2012, pois e a versao em vigor.
Vasto em todo o seu conteudo, ele e subdividido em diversas partes e geracoes, que
suprem toda a abordagem atual de padronizacao para a melhor compatibilidade entre
diferentes fabricantes. Espera-se, com essa padronizacao, que diferentes dispositivos, de
diferentes fabricantes possam utilizar a mesma rede sem fio.
Alem disso o protocolo foi criado para ser totalmente compatıvel a tecnologia Ether-
net, utilizada nas redes com fio atuais. Ou seja, o padrao 802.11 e uma tentativa de criar
uma Ethernet sem fio.
4
2.1 Elementos de uma WLAN
Antes de entender os conceitos que serao abordados, e necessario identificar os
dispositivos basicos que compoem uma WLAN.
2.1.1 Ponto de Acesso
O Ponto de Acesso e o dispositivo que faz a conexao da infraestrutura de rede
cabeada, como por exemplo a Ethernet, com os dispositivos sem fio.
2.1.2 Estacoes Moveis
As estacoes, ou dispositivos moveis, sao os ”nos”finais da rede e desejam obter o
acesso a infraestrutura. E onde ocorre a interacao com o usuario final. Como exemplos
de estacoes moveis, temos os notebooks, smartphones, tablets, cameras, etc.
2.2 Operacoes de uma WLAN
Nesta abordagem, e preciso entender como e feito o processo de deteccao de sinal
pelo dispositivo movel, processos de associacao e desassociacao dos dispositivos pela po-
tencia associada e fatores fısicos, como os canais da banda de 2.4 GHz e suas interferencias
naturais.
O mecanismo de Probe Request - Probe Response, feito por meio dos quadros Wi-
Fi de mesmo nome, e um dos responsaveis por informar ao equipamento quais sao as
redes Wi-Fi no ambiente e algumas de suas caracterısticas e, portanto, e o principal
procedimento a ser entendido, visto que e atraves desses quadros que o software fara a
leitura do ambiente. Portanto, sera dedicado um capıtulo inteiro para a sua abordagem.
2.2.1 Deteccao do Sinal das Redes Sem Fio de Forma Passiva
Os dispositivos podem detectar as redes sem fio de duas maneiras, passiva ou ati-
vamente. Nesta secao, abordaremos a deteccao passiva, que e utilizada pelos dispositivos
moveis para identificar e utilizar as redes sem fio disponıveis naquele ambiente sem execu-
tar nenhuma atividade.. No proximo capıtulo abordaremos a deteccao ativa, que e feita
atraves do mecanismo Probe Request - Probe Response.
5
Os dispositivos identificam as diferentes redes sem fio de forma passiva atraves dos
Beacons, que sao quadros enviados pelos pontos de acesso com frequencia, geralmente,
de dez vezes por segundo, com informacoes referentes as configuracoes de suas redes sem
fio ou SSIDs (Services Set Identifier). Estes quadros sao enviados em Broadcast e sem
criptografia a fim de que todos os dispositivos, associados ou nao, identifiquem a rede e
suas configuracoes necessarias como taxas de transmissao e recepcao basicas e requeridas,
e tipo de criptografia, por exemplo.
Dentro desses quadros e nos cabecalhos de quadros IEEE 802.11 encontra-se o BS-
SID (Basic Service Set Identifier), uma sequencia de 6 bytes representados por meio de
algarismos hexadecimais que identifica uma WLAN da interface de radio de um ponto de
acesso. Ou seja, o BSSID identifica o SSID e o ponto de acesso cujo BSS ele pertence.
Este conceito e importante em um ambiente onde ha mais de um ponto de acesso traba-
lhando com o mesmo SSID. Na Figura 2.1 segue o exemplo de um Beacon com o campo
informacao do seu BSSID.
Figura 2.1: Quadro Beacon, capturado pelo software Wireshkark.
6
Quanto ao processo de identificar a potencia de recepcao dos quadros dos BSSIDs,
existem dois casos a serem analisados: quando os dispositivos estao associados ao BSSID
e quando os dispositivos estao analisando a potencia recebida de BSSIDs aos quais nao
estao associados.
Quando estao associados ao BSSID, os dispositivos verificam a potencia em todos os
quadros que sao recebidos do ponto de acesso em questao, sejam esses quadros destinados
somente a ele ou os quadros de Broadcast.
Quando nao estao associados a eles, os dispositivos analisam as potencias atraves
dos Beacons que recebem dos diferentes BSSIDs, ou por meio do mecanismo de Probe-
Request, Probe-Response. O mecanismo Probe-Request, Probe-Response sera analisado
com mais detalhes no proximo capıtulo.
2.2.2 Processos de Associacao e Desassociacao
O conceito de associacao e desassociacao dentro do IEEE 802.11 e melhor entendido
quando abordado junto ao conceito de autenticacao e desautenticacao. Alem desses, ainda
serao abordados os conceitos de Roaming e Reassociacao.
Para entender esses processos, e necessario separar dois cenarios distintos: quando
ha um unico BSS, ou seja, apenas um ponto de acesso para um SSID ; e quando ha um
ESS (Extended Service Set), ou seja, mais de um ponto de acesso para um unico SSID.
Na Figura 2.2, segue a ilustracao do BSS e do ESS.
Nesta figura, identifica-se que um ESS e um conjunto de BSSs, ou seja, sempre
que ha um ESS havera, no mınimo, dois BSSs.
Se houver um unico BSS, haverao apenas os processos de autenticacao e desauten-
ticacao, junto ao processo de associacao e desassociacao.
O processo de associacao do dispositivo movel com o ponto de acesso sempre se da
depois da autenticacao. Esta ocorre de duas maneiras distintas, de acordo com o primeiro
padrao IEEE 802.11: Open System Authentication, que e a autenticacao mais basica, onde
so ocorre uma troca de quadros de identificacao entre ponto de acesso e dispositivo final; e
o Shared Key Authentication, que so sera bem sucedida se os dois dispositivos envolvidos
tiverem um tipo de chave de seguranca configurada neles. Esta ultima nao e mais utilizada
nas novas geracoes do IEEE 802.11, portanto nao seguira nos nossos estudos.
Depois do sucesso da autenticacao dos dispositivos comeca o processo de associacao.
7
Figura 2.2: Conceito de BSS e ESS.[4]
Este so tera sucesso se preencher alguns requisitos: o dispositivo movel conseguir alcancar
a taxa mınima requerida pelo ponto de acesso; e no caso de uma rede com criptografia,
fornecer a senha correta do SSID em questao. So a partir da associacao, o dispositivo
esta pronto para, entao, utilizar a infraestrutura do BSS em questao.
O processo de desassociacao se da atraves de uma notificacao, que varia de sen-
tido de acordo com quem decide pela desassociacao. Podera ocorrer quando o ponto de
acesso for retirado da rede por algum motivo, quando o dispositivo movel nao conseguir
uma potencia que garanta um taxa mınima de associacao, quando o dispositivo movel se
desassociar ao desligar o sistema operacional ou quando houver um processo de desau-
tenticacao, lembrando que, para estar associado e necessario que haja uma autenticacao
anterior.
Na Figura 2.3, observa-se a ordem dos processos de Autenticacao e Associacao,
assim como a Desautenticacao e a Desassociacao.
No caso do ESS, alem de entender os processos que ocorrem no caso anterior,
tambem e necessario atentar-se ao Roaming e ao processo de Reassociacao.
Estes processos estao estritamente ligados, visto que um processo so acontece apos
a ocorrencia do outro, da seguinte maneira:
O Roaming e o processo que fornece a capacidade dos dispositivos moveis de tro-
8
Figura 2.3: Processos de Autenticacao e Associacao.[5]
carem de BSSID sem trocarem de SSID, ou seja, o dispositivo movel consegue se associar
a outro ponto de acesso que contenha a mesma rede sem fio, de forma automatica, e a
essa nova associacao a um mesmo SSID e chamada de Reassociacao.
Por esse motivo, so faz sentido abordadar esse conceito quando se trata de ESSs,
pois sao necessarios diferentes BSSIDs com um mesmo SSID.
Essa decisao de troca de BSSIDs ocorre, normalmente, por uma decisao do dis-
positivo movel, que leva em conta para sua decisao, a potencia recebida dos pontos de
acesso, assim como, o nıvel de ruıdo e a taxa de erro de bits. Os valores destes requisitos
variam de acordo com as especificacoes do fabricante.
Durante este processo de Reassociacao, o futuro ponto de acesso envia uma noti-
ficacao ao atual, para que este envie os dados de Buffer referentes ao dispositivo movel
que esta se reassociando. So depois dessa informacao retornar ao futuro ponto de acesso
que a Reassociacao pode ser concluıda. Este processo de comunicacao entre os pontos de
acesso se da via DSM (Distribution System Medium), que e o Backbone que conecta os
pontos de acesso fisicamente. A maneira que ocorre esse processo nao esta definida no
9
protocolo IEEE 802.11. Os fabricantes estao livres para criar e implementar protocolos
que realizam esta funcao.
Existem tambem algumas praticas que nao estao definidas no protocolo IEEE
802.11 utilizadas pelos fabricantes dos pontos de acesso, que forcam os dispositivos finais
a mudarem de ponto de acesso manipulando valores de potencia de recepcao em Beacons,
por exemplo.
Na Figura 2.4, a seguir, ilustra-se um processo de Roaming.
Figura 2.4: Roaming.[6]
Esta demonstrada na Figura 2.4 uma troca de BSSs, por um dispositivo movel,
sem trocar o SSID ao qual esta associado. Esta troca pode ter sido feita pelo aumento
da potencia recebida do sinal de um BSS em relacao ao outro, por exemplo.
2.3 Potencia de Recepcao x Taxa de Associacao
A relacao potencia x taxa de associacao esta diretamente ligada a tecnologia apli-
cada no enlace (IEEE 802.11b, IEEE 802.11g, IEEE 802.11n, IEEE 802.11ac, entre outras)
assim como as especificacoes do fabricante das antenas, dos ponto de acessos e ate mesmo
dos dispositivos finais. Essa ligacao com a tecnologia provem do fato de que a cada nova
”versao”do IEEE 802.11, novos metodos de criptografia, codificacao, correcao de erros, etc.
sao lancados e, a partir disso, consegue-se um melhor aproveitamento da banda utilizada.
10
2.3.1 RSSI e Potencia de Recepcao
E interessante ressaltar que deteccao do sinal feita pela interface Wi-Fi e a con-
versao do nıvel de sinal recebido para a unidade ”dBm”pelos dispositivos Wi-Fi e muito
deficiente em questoes de precisao e nao possui um padrao definido. A interface realiza a
medicao do sinal pelo nıvel de energia recebido em cada quadro e da a isso o nome de RSSI
(Receive Signal Strenght Indicator). A partir do RSSI, cada fabricante pode decidir como
relacionar isso a um nıvel de potencia. Essa conversao, entretanto, nao e mandatoria.[14].
Tambem e importante observar que um equipamento que realiza medicoes com
alta precisao tem um custo muito elevado e necessita constantemente de calibracao. Os
dispositivos Wi-Fi, geralmente, nao tem um aparelho de medicao precisa e muito menos
passa por algum tipo de calibracao ao longo do tempo de uso do mesmo. Pode-se concluir,
portanto, que existe um alto nıvel de erro associado as medicoes realizadas por esses
dispositivos.
2.3.2 Taxa de Associacao
Antes de tentar analisar essa relacao ”Potencia x Taxa de Associacao”, e necessario
identificar as tecnologias e suas taxas especificadas por protocolo, que serao abordadas no
software.
O protocolo IEEE 802.11b, publicado no ano de 1999, contem dois tipos de tecno-
logias, a DSSS (Direct Sequence Spread Spectrum), que especifica taxas de 1 e 2 Mbps,
e a HR-DSSS (High-Rate DSSS ), que especifica taxas de 5,5 e 11 Mbps. Este protocolo
continuou compatıvel com o legado dos dispositivos que usavam IEEE 802.11 com tec-
nologia DSSS. Estas tecnologias requerem um largura de banda de canal igual a 22MHz,
devido as suas caracterısticas de codificacao de bits e a largura das suas subportadoras.
O protocolo IEEE 802.11g, que foi publicado no ano de 2003, veio com uma nova
tecnologia denominada ERP (Extended Rate Physical), com duas formas mandatorias de
organizarem suas informacoes na banda de 2,4GHz: o ERP-OFDM (Extended Rate Phy-
sical - Ortogonal Frequency Division Multiplexing), que utiliza a tecnologia OFDM, criada
para o protocolo IEEE 802.11a aplicada na banda de 5GHz, e fixa as taxas mandatorias
6, 12 e 24 Mbps; e o ERP-DSSS para manter a compatibilidade com as tecnologias DSSSs
das geracoes anteriores que fixam as taxas de 1, 2, 5,5 e 11 Mbps. Alem dessas tecnologias
mandatorias ERP, ainda existem mais duas opcionais, alem das taxas tambem suportadas
11
de 9, 18, 36 e 54 Mbps.
O protocolo IEEE 802.11n, que foi publicado no ano de 2009, estabelece normas
para as duas bandas alocadas para as redes sem fio, 2,4 e 5 GHz. Este protocolo esta-
belece o conceito HT (High Throughput, que utiliza a tecnologia MIMO (Multiple-input,
Multiple-output e, junto com a tecnologia OFDM, conseguiu estabelecer taxas ainda maio-
res paras as comunicacoes de rede sem fio. Para manter a compatibilidade com as geracoes
anteriores estao definidas as taxas de 6 Mbps a 54Mbps, porem, de acordo com a modu-
lacao, codificacao, entre outros fatores, sao capazes de chegar a taxas de 600 Mbps em
condicoes ideais.
Tendo conhecimento dessas taxas e necessario entender que a analise da potencia,
sem levar em conta o ruıdo do ambiente, podera dar uma ideia erronea da taxa com a qual
o dispositivo final estara associado ao ponto de acesso. Isso se da pois o ruıdo do ambiente
podera contribuir com a queda da taxa de transmissao/recepcao, pois a integridade dos
quadros podera estar comprometida.
Portanto, nao e possıvel estabelecer com precisao uma potencia associada a uma
taxa, mas atraves da especificacao de um fabricante, como segue na Figura 2.5, pode-se
ter uma ideia de quais valores de potencia em dBm conseguem as taxas de transmissao/-
recepcao que sao utilizada nos enlaces estudados.
Entender esses valores e importante para a compreensao das informacoes que serao
retiradas do software. Quais numeros sao ideais, quais sao suficientes e quais sao insus-
tentaveis, de acordo com o projeto. Alem de entender, com a ausencia de um analisador
de ruıdo, ate onde vai a eficiencia do software para a elaboracao ou analise do ambiente
Wi-Fi.
12
Figura 2.5: Potencia x Taxa de Associacao, Data Sheet do ponto de acesso 7522 da
Extreme Networks.[7]
13
Nesta imagem verificar-se as taxa que o ponto de acesso consegue se comunicar
com os dispositivos, de acordo com a potencia de recepcao relacionada.
Este valores indexados de MCS (Modulation ande Coding Scheme) dizem quais
taxas sao alcancadas de acordo com a modulacao, largura de canal, codificacao, intervalo
de guarda e o numero de fluxos espaciais. Os valores desses ındices sao identificados em
tabelas de MCS, definidas por este protocolo e o IEEE 802.11ac.
Estas tabela pode ser consultada publicamente no site www.mcsindex.com.
2.4 Banda ISM de 2,4 GHz
A ISM Band (Industrial, Scientifc and Medical Radio Bands) e uma banda no
espectro de radio que esta reservada, para o uso da Industria, Ciencia e Medicina, alem
de outras aplicacoes de Telecomunicacoes. As redes IEEE 802.11 estao planejadas para
ocuparem duas faixas distintas da ISM Band: a banda de 2,4 GHz, que vem sendo utilizada
desde o inıcio da aplicacao das redes sem fio, e a banda de 5 GHz, que foi incluıda
posteriormente.
Muitos dispositivos ainda nao operam na banda de 5GHz, portanto, nos aprofun-
daremos na faixa de 2,4GHz.
2.4.1 Especificacoes
A banda de 2,4 GHz ISM tem um largura de 83,5 MHz, entre 2,4 e 2,4835 GHz,
divididos em 14 canais, sendo os 13 primeiros espacados de 5 MHz de suas frequencias
centrais e o ultimo canal espacado de 8 MHz do penultimo. Entretanto, nem todos estes
canais estao legalizados para serem utilizados pelas redes sem fio em todos os paıses. No
Brasil, estao em operacao os canais ilustrados na Figura 2.6.
A largura desses canais utilizados varia de acordo com a tecnologia empregada. A
tecnologia DSSS, como pode ser verificado na Figura 2.7, utiliza uma largura de banda
de 22MHz a partir do protocolo IEEE 802.11b. A tecnologia OFDM utiliza a largura
de 20MHz por canal a partir dos protocolos IEEE 802.11g e IEEE 802.11n. Este ultimo
tambem especifica uma largura de 40 MHz. A ilustracao desses canais pode ser verificada
na Figura 2.8
14
Figura 2.6: Canais Wi-Fi em operacao Brasil.[8]
Figura 2.7: Canais da tecnologia DSSS.[9]
Analisando as figuras anteriores, independente da tecnologia utilizada, com largura
de canal de 20 ou 22MHz, os canais 1, 6 e 11 nao se sobrepoem. Portanto, sao os canais
mais aconselhaveis para utilizacao, visto que canais que se sobrepoem acrescentam e sofrem
de ruıdos dos demais canais.
Verifica-se ainda que na banda de 2,4 GHz, quando utilizada uma largura de canal
de 40 MHz, pode-se alocar apenas um canal, visto que qualquer outro canal de 40 MHz
ira se sobrepor a ele.
Dessa forma, estudos de canais sao importantes para conseguir um ambiente mais
propıcio para taxas mais elevadas nas comunicacoes das redes sem fio.
15
Figura 2.8: Canais de largura 20 MHz e 40 MHz da tecnologia OFDM.[10]
Capıtulo 3
Probe-request, Probe-response
Como foi dito no capıtulo anterior, os dispositivos moveis identificam as redes sem
fio do ambiente de duas maneiras distintas: de forma passiva (atraves dos quadros de
Beacons), ou de forma ativa (quadros de Probe-request e Probe-response).
No desenvolvimento do software foi avaliado que a melhor maneira de analisar
o ambiente Wi-Fi seria atraves do mecanismo de Probe-request e Probe-response pois o
proprio hardware, que rodara a aplicacao, enviara estes quadros para colher as informacoes
do ambiente, tendo a analise de forma mais rapida em relacao a forma passiva, que precisa
esperar os beacons dos pontos de acesso para colher essas mesmas informacoes.
Portanto, este capıtulo discorrera mais sobre a deteccao ativa que e o mecanismo
base do software.
Os quadros de Probe-request sao classificados como quadros de gerenciamento e sao
enviados pelos dispositivos moveis a fim de identificar as redes sem fio disponıveis e todas
as suas caraterısticas a partir dos quadros que sao enviados, como forma de resposta,
pelos pontos de acesso, os Probe-response. Estes quadros podem ser enviados tanto para
um especıfico SSID (direct probe request), como para qualquer SSID (null probe request)
que contenha no ambiente.
Quando o dispositivo quer descobrir outros pontos de acesso que contenham o SSID
ao qual esta associado, ele envia um quadro de Probre-request com o campo referente a
identificacao do SSID preenchido. Quando o dispositivo quer descobrir todas as redes
do ambiente, ele envia o Probe-request com o campo reservado para o SSID vazio. Este
procedimento pode ser visualizado na Figura 3.1.
Estes quadros sao enviados em Broadcast em todos os canais disponıveis no disposi-
17
Figura 3.1: Probe-request, Probe-response. Grafico Espacial
tivo final. Ele pode ser feito sem estar associado a nenhum ponto de acesso, ou associado
a algum. A frequencia com que isso e feito varia de acordo com o fabricante e o tipo
de dispositivo, uma vez que este procedimento facilita o Roaming, e dispositivos como
notebooks ou smartphones tem dinamicas diferentes de circulacao no ambiente.
A Figura 3.2 ilustra o procedimento de deteccao ativa de sinal (Probe-request,
Probe-response), seguido por uma autenticacao da rede de um ponto de acesso e a asso-
ciacao, ate a troca de dados.
18
Figura 3.2: Probe-request, Probe-response.Grafico Temporal [11]
Capıtulo 4
Desenvolvimento do Software
O software desenvolvido e uma ferramenta de analise de ambientes Wi-Fi. Proprio
para redes que trabalham na faixa de 2,4 GHz, ele analisa as WLANs que utilizam esta
banda, tanto para ajudar na elaboracao de um novo projeto de cobertura Wi-Fi, quanto
para o estudo da uma WLAN existente. Atraves de seus graficos dinamicos e relatorios e
capaz de identificar problemas e possıveis melhorias relativo a rede analisada.
Antes de explicar o funcionamento e a elaboracao do software, e necessaria uma
pequena abordagem sobre as ferramentas que tornaram possıvel o seu desenvolvimento,
o que sera feito nos itens a seguir.
4.1 Linux
Mais do que uma ferramenta, o Linux e um Sistema Operacional, capaz de gerenciar
todos os recursos de hardware presentes em sua maquina.
O Linux e a base para diferentes distribuicoes, como Ubuntu e Fedora. Com o
codigo aberto, possibilita que milhares de desenvolvedores ao redor do mundo contribuam
para a sua melhoria. Possui, tambem, grande quantidade de ferramentas que facilitam o
gerenciamento de redes com e sem fio.[12]
Devido a essas caracterısticas, foi utilizado o Linux, mais precisamente a distribui-
cao Ubuntu versao 16.04.3 LTS, e suas ferramentas proprias para o desenvolvimento do
software. Neste processo, foi de fundamental importancia, dentre as ferramentas utiliza-
das, o programa iwlist.
20
4.1.1 Programa iwlist
Programa utilizado para apresentar os dados que serao estudados no software, o
iwlist e proprio do Linux, sendo responsavel por recolher informacoes sobre as redes Wi-Fi
do ambiente. Seu uso foi feito por meio do comando iwlist <interface> scanning e a saıda
do mesmo esta ilustrada na Figura 4.1.
Utilizando o mecanismo probe-request, probe-response, que foi explicado neste tra-
balho, o iwlist foi essencial para gerar os valores das potencias de recepcao dos sinais das
redes Wi-Fi do ambiente. O iwlist fornece uma gama de informacoes sobre os BSSs que
estao operando, como potencia de recepcao, tipo de criptografia, BSSID, SSID, etc.
Figura 4.1: Saıda do Comando iwlist
O comando precisa ser executado com privilegios de administrador para que todas
as informacoes sejam adquiridas. Cada vez que o comando e executado, a interface Wi-
Fi envia quadros Probe-Request para todos os canais permitidos e espera os quadros
Probe-Response com as informacoes de cada BSS. Caso o comando seja executado sem os
21
privilegios de administrador, ele captura informacoes antigas que nao sao uteis no escopo
do software.
4.1.2 O Programa gnuplot
O gnuplot e um programa do Linux para geracao de graficos 2D e 3D, exportando-
os nos mais variados arquivos. Possui uma interface de linha de comando, na qual e
possıvel determinar parametros para a geracao dos graficos e quais sao as fontes de dados
para a plotagem dos mesmos.
Segue um exemplo de determinacao de parametros e geracao de um grafico a partir
do gnuplot :
Figura 4.2: Arquivo Gnuplot
4.2 Python
4.2.1 Descricao
A linguagem de programacao utilizada para escrever o codigo do software e Python.
E uma linguagem de alto nıvel, por ter sintaxe e nıvel de abstracao muito semelhantes
a linguagem humana, permitindo que o codigo fique mais facil de ser entendido e mais
simples de ser elaborado. Outra caracterıstica importante e o fato de mesclar paradigmas
de programacao estruturada e orientacao a objetos, o que permite ao programador utiliza-
la tanto para simples tarefas que sao executadas em sua propria linha de comando, quanto
para elaborar grandes classes para projetos complexos.[13]
Foi utilizada a versao 2.7 do Python para a elaboracao do programa.
22
Sintaxe
Python possui uma sintaxe simples, moderna e clara, facilmente entendida, como
pode-se observar no pedaco de codigo adiante:
1 de f 10 porcento ( va lordaconta ) :
2 re turn va lordaconta ∗1 .1
3
4 p r in t ”O va lo r da conta f o i : ” + s t r (10 porcento (50) )
Nele e criada uma funcao chamada 10porcento que calcula o valor da final da
conta com os 10% do garcom acrescidos. Pode-se observar que a organizacao das su-
bordinacoes do codigo e feita diretamente por nıveis de tabulacao, sem a necessidade de
insercao de caracteres especiais.
Estruturas
Python tambem possui excelentes estruturas para analise de dados cientıficos, ope-
racao que e base do software - entre elas estao seus dicionarios e suas listas. Segue exemplo
de codigo:
1 l i s t a 1 = [10 , 20 , 30 , 50 , 60 ]
2 l i s t a 2 = [ ’ amarelo ’ , ’ branco ’ , ’ vermelho ’ , ’ azu l ’ ]
3 l i s t a 3 = [ 2 . 5 , 7 . 899 , 6 . 3 325 ]
4
5 d ic1 = { ’ l i s t a i n t e i r o s ’ : l i s t a 1 , ’ l i s t a c o r e s ’ : l i s t a 2 , ’ l i s t a r e a i s ’ : l i s t a 3 }
6
7 p r in t d ic1 [ ’ l i s t a i n t e i r o s ’ ]
Nele, sao criadas 3 listas, cada uma com um tipo: a primeira com inteiros, a
segunda com strings e a terceira com numeros reais. E interessante ressaltar que nao e
necessario informar o tipo de variavel a ser declarada, nem declara-la anteriormente. Em
seguida, e criado um dicionario. Este tipo de estrutura recebe como elemento qualquer
outro tipo de dado, desde que imutavel, e os elementos sao reconhecidos por sua string
chave. No exemplo acima, a linha 7 imprime os elementos da lista1. A estrutura de
dicionarios e um elemento chave para a analise e tratamento de dados do software.
23
Orientacao a Objetos
A orientacao a objeto faz parte da espinha dorsal do software por proporcionar
a referencia a um atributo da classe principal em qualquer um de seus metodos e em
qualquer parte do codigo a partir da instanciacao de um objeto desta classe. O codigo
abaixo exemplifica essa caracterıstica:
1 c l a s s Complexo :
2 de f i n i t ( s e l f , pa r t e r ea l , parteimag ) :
3 s e l f . r = pa r t e r e a l
4 s e l f . i = parteimag
5
6 x = Complexo ( 3 . 0 , −4.5)
7 x . r , x . i
8 ( 3 . 0 , −4.5)
Neste codigo, e definida uma classe chamada Complexo na linha 1 e seu construtor
na linha 2. A classe recebe duas variaveis como entrada na sua construcao: partereal e
parteimag e associa as duas a seus atributos self.r e self.i, respectivamente. A utilizacao
do operador self e necessaria para ajudar na compreensao de que as variaveis que o seguem
sao atributos da classe.
Depois da definicao, o objeto x e instanciado como um objeto da classe Complexo.
Com isso, pode-se referenciar os atributos, agora do objeto x, em qualquer parte do codigo
escrevendo x. seguido do atributo.
Instalador pip
O Python possui uma ferramenta para instalacao de suas bibliotecas, conhecida
como pip. Para instalar bibliotecas a partir do pip, e utilizado o comando abaixo:
pip install <biblioteca>
4.2.2 Bibliotecas Utilizadas
Inumeras bibliotecas da linguagem Python sao utilizadas no codigo do software cujo
desenvolvimento e o objetivo principal deste trabalho. Apesar disso, somente algumas
delas, cujas caracterısticas sao mais relevantes, serao descritas nesta subsecao. Sao elas:
24
• os : Execucao de comandos do SO Linux dentro do codigo Python
• Tkinter : Construcao da interface grafica
• matplotlib: Contrucao e atualizacao dos graficos dinamicos
• Gnuplot : Construcao dos graficos dos relatorios em PDF
os
A biblioteca os, mais especificamente o metodo os.popen(”comando”), permite que
o desenvolvedor execute comandos do shell do Sistema Operacional no qual o Python esta
instalado e copie a saıda destes comandos para uma variavel/arquivo dentro do Python.
Para trabalhar com a saıda deste comando, e necessario executar uma leitura nesta
variavel de saıda e armazenar esta informacao como string em outra variavel.
No contexto do software desenvolvido, este metodo tem a funcao de executar o
comando iwlist e receber a sua saıda para que seja feito o tratamento de dados.
Na descricao do desenvolvimento do software, e detalhado o procedimento de ad-
quirir e tratar esses dados.
Tkinter
A biblioteca Tkinter foi utilizada para a construcao da interface grafica do software.
E nativa do Python, ou seja, ao instala-lo, a biblioteca Tkinter tambem sera instalada.
Basta que a biblioteca seja importada no codigo para que se possa trabalhar com ela.
O Tkinter possui alguns elementos comuns a toda interface grafica. Sao eles:
• Containers: e analogo a uma caixa onde sao colocados outros elementos graficos
dentro. Um container pode ser uma janela, ou uma divisao interna dela.
• Widgets: sao os elementos que sao colocados ”dentro” de um container, geralmente
fornecendo informacoes ou interacao com o usuario. Exemplos: botoes, textos,
graficos, etc.
• Event Handler: e a funcao que trata um evento. Ao clicar um botao, um evento e
acionado; o event handler determina o que sera feito a partir desse momento.
• Event Loop: loop que aguarda o acionamento de um evento e aciona o event handler
25
Toda a interface grafica e construıda a partir da instanciacao da janela principal.
Essa janela e criada usando o metodo Tk(). Apos a criacao da janela principal, comecam
a ser criados os outros elementos: containers e widgets. Por fim, e executado o metodo
mainloop() que inicia o event loop da janela principal. Somente apos o fechamento da
janela, o codigo abaixo do metodo mainloop e executado. Segue exemplo:
1 import Tkinter
2
3 root = Tkinter .Tk( )
4 root . mainloop ( )
Tambem e possıvel associar elementos do Tkinter a classes. Essa ferramenta foi
usada no desenvolvimento do software para facilitar a referencia aos atributos da interface
grafica.[15]
matplotlib
O matplotlib e uma biblioteca usada para a criacao de graficos 2D. Essa biblioteca
e baseada no software MATLAB e muitos dos seus metodos e elementos sao os mesmos
do MATLAB.
No trabalho em questao, foi usada para a plotagem dos graficos dinamicos de RSSI
versus Tempo.
Foi feita uma integracao do Tkinter com o matplotlib para poder usar suas figuras
dentro dos containers e widgets do Tkinter.
Gnuplot
Foi utilizada a biblioteca Gnuplot para a geracao dos relatorios em PDF. Ela per-
mite que sejam executados comandos e determinados parametros do gnuplot (programa
de geracao de graficos do Linux) dentro do Python.
Segue um exemplo de script Python para a geracao de um grafico:
1 import Gnuplot
2
3 g = Gnuplot . Gnuplot ( )
4 g . t i t l e ( ”TESTE”)
26
5
6 g . x l ab e l ( ”x ”)
7 g . y l ab e l ( ”y ”)
8
9 g ( ” s e t g r id ”)
10 g ( ” s e t x t i c 10 ”)
11 g ( ” s e t y t i c 1 ”)
12
13 x = [ 1 , 2 , 3 , 4 , 5 , 6 ]
14
15 y1 = [ 1 , 2 , 3 , 4 , 5 , 6 ]
16
17 d1 = Gnuplot . Data (x , y1 , with =” l i n e s ”)
18
19 g ( ” s e t te rmina l pdf monochrome enhanced s i z e 30cm,15cm”)
20 g ( ” s e t output ’/home/devbru ubuntu/Dropbox/TCC/ t e s t e . pdf ’ ”)
21 g . p l o t ( d1 )
22
23 de l g
Como dados de entrada do Gnuplot utilizou-se listas do Python e foram setados os
parametros atraves de strings.
Deve-se criar uma instancia do Gnuplot com o metodo tambem chamado de Gnu-
plot e, entao, alterar os parametros para a geracao dos graficos. O metodo Data e
responsavel por receber os dados como uma lista e o metodo plot gera o grafico em si.
4.3 Explicacao do Codigo Fonte
O Software foi construıdo utilizando a linguagem Python e fez uso de varios recursos
da mesma, alem de ferramentas do Sistema Operacional Linux.
O objetivo desta secao e descrever algumas partes relevantes do codigo fonte que
proporcionam todas as funcionalidades e o seu consideravel desempenho. Tal descricao,
entretanto, nao sera exatamente fiel ao codigo fonte para nao sobrecarregar o leitor, uma
vez que serao utilizadas adaptacoes mais didaticas para facilitar a compreensao. Alem
disso, nem todas as linhas do codigo serao descritas aqui pelo mesmo motivo.
27
4.3.1 Utilizacao de Orientacao a Objetos
Para facilitar a construcao e manter a coesao e organizacao do codigo fonte, foi
utilizado o paradigma de Orientacao a Objeto, caracterıstica importante da linguagem
Python.
Foi criada uma classe WiFind que possui diversos atributos e metodos. Esta classe
tem, como argumento de entrada de seu construtor, a variavel que recebeu o metodo Tk()
do Tkinter. Esta variavel possui, portanto, uma referencia a janela principal da interface
grafica.
O codigo a seguir mostra como essa criacao e a instanciacao do objeto sao feitas:
1 de f i n i c i a i n t e r f g r a f i c a ( ) :
2 root = tk .Tk( )
3 o b j e t o p r i n c i p a l = WiFind ( root )
4 root . mainloop ( )
5
6 # Classe P r i n c i pa l
7 c l a s s WiFind :
8 de f i n i t ( s e l f , top=None ) :
A funcao inicia interf grafica() e responsavel por instanciar o objeto principal
que e da classe WiFind. Ele passa como argumento a variavel root que e a janela
principal.
No construtor da classe WiFind observa-se as variaveis self e top. A variavel
self e utilizada para fazer referencia a atributos e metodos da propria classe e a variavel
top faz referencia a janela principal.
Os metodos e atributos da classe WiFind serao explicados nas proximas subsecoes.
4.3.2 Construcao da Interface
Conforme citado na secao 4.3.1, a construcao da interface grafica foi realizada por
meio da biblioteca Tkinter. Para isso, e necessario importa-la no inıcio do codigo, e nao e
necessaria a instalacao desta biblioteca na versao do Linux que foi utilizada. A biblioteca
e uma ferramenta nativa da instalacao do Python.
28
Importacao da Biblioteca
A biblioteca e importada da seguinte forma:
1 ## Bib i o t e ca s do Tkinter para i n t e r f a c e g r a f i c a
2 import Tkinter as tk
3
4 ## Themed Tkinter
5 import t tk
A biblioteca e importada usando a variavel tk para facilitar sua referencia futura-
mente. Tambem foi importada a biblioteca ttk, uma versao com alguns recursos a mais
do Tkinter.
A criacao da janela principal foi explicada na secao anterior. Nela serao colocados
os containers e widgets da interface grafica do software.
Criacao dos Frames/Containers
O software tem dois Frames (ou containers) principais: O container das Abas, que
e um Notebook e o Frame do Tıtulo. Esses Frames sao os containers que receberao os
widgets de Label (Texto), botoes, caixas de selecao, imagens e os graficos. Segue o codigo
da criacao do Frame do Tıtulo:
1 #Criacao do Frame do t i t u l o
2 s e l f . Frame Titulo = tk . Frame( top ) # cr iando frame
3 s e l f . Frame Titulo . p lace ( r e l x =0.0 , r e l y =0.0 , r e l h e i g h t =1.0 , r e lw id th =0.2) #
dimensoes
4 s e l f . Frame Titulo . c on f i gu r e ( r e l i e f=tk .GROOVE)
5 s e l f . Frame Titulo . c on f i gu r e ( borderwidth=”2 ”)
6 s e l f . Frame Titulo . c on f i gu r e ( background=”#f fbd4a ”)
7
8 # Criacao do Container Abas
9 s e l f . Container Abas = ttk . Notebook ( top )
10 s e l f . Container Abas . p lace ( r e l x =0.2 , r e l y =0.0 , r e l h e i g h t =1.0 , r e lw id th =0.8)
11 s e l f . Container Abas . c on f i gu r e ( take f o cus=””)
12
13 #Criacao do frame da Aba SSID
14 s e l f . Aba SSID = tk . Frame( s e l f . Container Abas )
29
15 s e l f . Aba SSID . c on f i gu r e ( background = ”#666666 ”)
16 s e l f . Container Abas . add ( s e l f . Aba SSID , padding=3)
17 s e l f . Container Abas . tab (0 , t ex t=”Scan por SSID” , unde r l i n e=”−1” , )
18
19 #Craicao do frame da Aba Geral
20 s e l f . Aba Geral = tk . Frame( s e l f . Container Abas , background=”#666666 ” , )
21 s e l f . Aba Geral . c on f i gu r e ( background = ”#666666 ”)
22 s e l f . Container Abas . add ( s e l f . Aba Geral , padding=3)
23 s e l f . Container Abas . tab (1 , t ex t=”Scan Geral ” , unde r l i n e=”−1” , )
O Frame do tıtulo e criado com o metodo tk.Frame. Tambem e passado como
parametro a variavel que faz referencia a janela principal, pois o Frame esta subordinado
diretamente a ela. A janela, a qual um Frame ou Widget e subordinado, e chamada de
mestre.
Na segunda linha pode-se observar o metodo place, metodo que insere o widget na
posicao delejada. As variaveis relx e rely sao as posicoes relativas do Frame no sistema
de coordenadas em relacao ao seu mestre, que e a janela principal. relheight e relwidth
seguem o mesmo raciocınio, mas em relacao a altura e largura, respectivamente. Na
terceira linha, e decidido como sera a borda do Frame. No caso em questao, foi escolhida
a borda com modo destacado e na quarta linha a largura da borda e configurada para ter 2
pixels. Na quinta linha, e escolhida a cor de fundo do Frame com um codigo hexadecimal
de cores.
No Frame do Tıtulo, sao inseridos widgets que estao relacionados ao tıtulo, aos
autores e a legenda do grafico.
Outro container criado e o self.Container Abas. Este container nao e um Frame,
mas sim um Notebook. O Notebook e criado com o metodo ttk.Notebook. E um widget
da biblioteca ttk. Nele e possıvel criar abas para que o usuario selecione qual aba estara
em destaque.
Cada aba do Notebook e um Frame e e criado da mesma forma que o Frame do
tıtulo. Foram criadas duas abas: self.Aba SSID, onde serao plotados os graficos de RSSI
para um SSID unicamente; e a aba self.Aba Geral onde serao plotados os graficos de
RSSI de todos os SSIDs encontrados de uma so vez.
30
Criacao de Outros Widgets Basicos
Os botoes, labels e listas ”dropdown”sao widgets simples que estao presentes nos
dois Frames principais do software. O codigo a seguir mostra a insercao deles:
1 #Inse r cao de Label
2 s e l f . Label EscolherSSID = tk . Label ( s e l f . Aba SSID)
3 s e l f . Label EscolherSSID . p lace ( r e l x =0.1 , r e l y =0.008 , r e l h e i g h t =0.04 ,
r e lw id th =0.3)
4 s e l f . Label EscolherSSID . c on f i gu r e ( act ivebackground=”#666666 ”)
5 s e l f . Label EscolherSSID . c on f i gu r e ( background=”#666666 ”)
6 s e l f . Label EscolherSSID . c on f i gu r e ( foreground=”white ”)
7 s e l f . Label EscolherSSID . c on f i gu r e ( t ex t= ’ ’ ’ Escolha o SSID : ’ ’ ’ )
8
9 #Inse r cao de dropdown l i s t
10 s e l f . dropdownSSID = ttk . Combobox( s e l f . Aba SSID , t e x t v a r i a b l e=s e l f . va r i ab l e ,
s t a t e=”readonly ” , va lue s=s e l f . DICSSIDs . keys ( ) )
11 s e l f . dropdownSSID . p lace ( r e l x =0.1 , r e l y =0.05 , r e l h e i g h t =0.04 , r e lw id th =0.3)
12
13 #Inse r cao de botao
14 s e l f . Button PlotarSSID = tk . Button ( s e l f . Aba SSID , image=s e l f .
Imagem BotaoSSID , j u s t i f y=tk .LEFT,
15 command = lambda
16 arg1 = ”Button PlotarSSID ” ,
17 arg2 = 1 ,
18 arg3 = ”Opcao por SSID e s c o l h i d a ! ” :
19 s e l f . buttonHandler ( arg1 , arg2 , arg3 ) ) # Faz a imagem aparecer no lugar
do botao Plotar . No caso , o botao eh a propr ia imagem
20 s e l f . Button PlotarSSID . p lace ( r e l x =0.4 , r e l y =0.03 , r e lw id th =0.2)
21 # Para f a z e r com que soh a imgagem s e j a v i s ta , prec i samos co l o c a r o botao
com borda nula , e cor de fundo i gua l a cor de fundo do conta ine r onde
e l e e s ta
22 s e l f . Button PlotarSSID . c on f i gu r e ( act ivebackground=”#666666 ”)
23 s e l f . Button PlotarSSID . c on f i gu r e ( background=”#666666 ”)
24 s e l f . Button PlotarSSID . c on f i gu r e ( d i s ab l ed fo r eg round=”#666666 ”)
25 s e l f . Button PlotarSSID . c on f i gu r e ( h igh l ightbackground=”#666666 ”)
26 s e l f . Button PlotarSSID . c on f i gu r e (bd=0)
A insercao de um Label e semelhante a insercao de um Frame, com algumas diferen-
31
cas: o mestre nao e a janela principal, e sim, no caso do label self.Label EscolherSSID,
o Frame self.Aba SSID. Na linha 7 e escolhido o texto a ser apresentado no label.
A dropdown list e criada com o metodo ttk.Combobox. Como parametros sao
passados: seu mestre; o estado, que diz se sera possıvel editar a lista ou nao; e os valores
que popularao a lista. No caso em questao, os valores que popularao a lista sao as keys
do dicionario self.DICSSIDs. Essas keys sao os nomes dos SSIDs encontrados.
O botao para plotar um unico SSID (self.Button PlotarSSID e criado na linha
14 com o metodo tk.Button. Esse botao tem a particularidade de ser mostrado com
uma imagem. A imagem foi passada como parametro tambem. O pressionamento deste
botao aciona a funcao self.buttonHandler e passa como parametro os argumentos arg1,
arg2 e arg3. Para passar estes parametros e usado o comando lambda, uma ferramenta
especial do Python que nao sera descrita aqui. Segue a rotina do self.buttonHandler:
1 de f buttonHandler ( s e l f , argument1 , argument2 , argument3 ) :
2 # A funcao buttonHandler tem um ob j e t i v o : a l imentar os eventos dos
botoes apertados .
3 # Ao aper ta r o botao ”Plotar ” em qualquer uma das abas e l a eh
acionada . A d i f e r e n c a e s ta nos argumentos passados .
4
5 i f argument1 == ”Button PlotarGera l ” :
6 s e l f . d e c i s a o g e r a l = 1
7
8
9 i f argument1 == ”Button PlotarSSID ” :
10 s e l f . d e c i s a o s s i d = 1
Quando esse botao e acionado, dependendo de qual botao tenha sido apertado,
ele altera o valor de uma das variaveis self.decisao geral ou self.decisao ssid. Essas
variaveis sao responsaveis por permitir que o loop de atualizacao do grafico seja executado.
Este loop sera explicado mais a frente nesta secao.
Segue a imagem da interface grafica com esses widgets inseridos:
Figura 4.3: Widgets na Interface Grafica
32
Menu de Opcoes
E criado tambem um menu de opcoes como mostra a figura a seguir:
Figura 4.4: Menu de Opcoes
que e construıdo pelo seguinte codigo:
1 # Conf iguracoes do menu supe r i o r da j an e l a p r i n c i p a l
2
3 s e l f . menubar = tk .Menu( s e l f . top , f ont=”TkMenuFont” , bg= bgco lor , f g=
f g c o l o r )
4 s e l f . top . c on f i gu r e (menu = s e l f . menubar )
5
6 s e l f . opcoes = tk .Menu( s e l f . top , t e a r o f f =0)
7 s e l f . menubar . add cascade (menu=s e l f . opcoes ,
8 act ivebackground=”#d9d9d9 ” ,
9 ac t i v e f o r eg round=”#000000 ” ,
10 background=”#d9d9d9 ” ,
11 font=”TkMenuFont” ,
12 foreground=”#000000 ” ,
13 l a b e l=” O p e s s ”)
14 s e l f . opcoes . add command(
15 act ivebackground=”#d8d8d8 ” ,
16 ac t i v e f o r eg round=”#000000 ” ,
17 background=”#d9d9d9 ” ,
18 font=”TkMenuFont” ,
19 foreground=”#000000 ” ,
20 l a b e l=”Gerar R e l a t r i o em PDF” ,
21 command=s e l f . gerarPDF )
22 s e l f . ajuda = tk .Menu( s e l f . top , t e a r o f f =0)
23 s e l f . menubar . add cascade (menu=s e l f . ajuda ,
24 act ivebackground=”#d9d9d9 ” ,
25 ac t i v e f o r eg round=”#000000 ” ,
26 background=”#d9d9d9 ” ,
33
27 font=”TkMenuFont” ,
28 foreground=”#000000 ” ,
29 l a b e l=”Ajuda ”)
30 s e l f . ajuda . add command(
31 act ivebackground=”#d8d8d8 ” ,
32 ac t i v e f o r eg round=”#000000 ” ,
33 background=”#d9d9d9 ” ,
34 font=”TkMenuFont” ,
35 foreground=”#000000 ” ,
36 l a b e l=”Sobre ” ,
37 command = s e l f . abre sobre )
38 s e l f . ajuda . add command(
39 act ivebackground=”#d8d8d8 ” ,
40 ac t i v e f o r eg round=”#000000 ” ,
41 background=”#d9d9d9 ” ,
42 #command=t e s t e t e l a 4 suppo r t ,
43 font=”TkMenuFont” ,
44 foreground=”#000000 ” ,
45 l a b e l=”Como Usar ” ,
46 command=s e l f . abre comousar )
O metodo utilizado e tk.Menu e o menu e associado a janela principal.
Cada item do menu tem parametros graficos a serem configurados e os itens da
lista chamam funcoes que abrem novas janelas. Isso e feito na opcao command. As
janelas abertas falam sobre como usar o software e informacoes sobre o mesmo.
4.3.3 Captura dos Dados
A captura dos dados e feita por meio da seguinte funcao:
1 s e l f . DICSSIDs = {}
2 s e l f . executathread = True
3 s e l f . threada l imenta = th ( t a r g e t=s e l f . a l im en t a l i s t a )
4 s e l f . threada l imenta . s t a r t ( )
5
6 de f a l im en t a l i s t a ( s e l f ) :
7 whi l e s e l f . executathread :
8 whi l e 1 :
34
9 s e l f . s a i d a i w l i s t = os . popen ( ’ i w l i s t wlp3s0 scanning | grep −A
5 Address ’ )
10 s e l f . s t r s a i d a i w l i s t = s e l f . s a i d a i w l i s t . read ( )
11 i f l en ( s e l f . s t r s a i d a i w l i s t ) != 0 :
12 break
13 time . s l e e p ( 0 . 1 )
14
15 s e l f . l i s t s t r s a i d a i w l i s t = s e l f . s t r s a i d a i w l i s t . s p l i t ( ’ \n ’ )
16 s e l f . q t d e c e l l s = len ( s e l f . l i s t s t r s a i d a i w l i s t ) /7
17
18 f o r s e l f . k in range (1 , s e l f . q t d e c e l l s +1) :
19 s e l f . s t r i n g c e l l a t u a l = s e l f . l i s t s t r s a i d a i w l i s t [ ( ( s e l f . k−1)∗7)
: ( ( s e l f . k∗7)−1) ]
20 s e l f . tamss idatua l = len ( s e l f . s t r i n g c e l l a t u a l [ 5 ] )
21 s e l f . s s i d a t u a l = s e l f . s t r i n g c e l l a t u a l [ 5 ] [ 2 7 : ( s e l f .
tamss idatua l −1) ] ;
22 s e l f . b s s i d a tua l = s e l f . s t r i n g c e l l a t u a l [ 0 ] [ 2 9 : 4 6 ]
23 s e l f . r s s i a t u a l = in t ( s e l f . s t r i n g c e l l a t u a l [ 3 ] [ 4 8 : 5 1 ] )
24 s e l f . c a n a l c e l l a t u a l = s e l f . s t r i n g c e l l a t u a l [ 1 ] [ 2 8 ]
25
26 i f not s e l f . s s i d a t u a l in s e l f . DICSSIDs :
27 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] = {}
28
29 i f not s e l f . b s s i d a tua l in s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] :
30 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] = {}
31 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cana l ’ ] =
s e l f . c a n a l c e l l a t u a l
32 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] =
range (0 ,60 )
33 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ epoch ’ ] =
range (0 ,60 )
34 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ med ia r s s i
’ ] = s e l f . r s s i a t u a l
35
36 i f s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cana l ’
] == ’ 1 ’ :
37 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cor ’ ]
= ’ red ’
38
35
39 e l i f s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’
cana l ’ ] == ’ 6 ’ :
40 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cor ’ ]
= ’ blue ’
41
42 e l i f s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’
cana l ’ ] == ’ 11 ’ :
43 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cor ’ ]
= ’ green ’
44
45 e l s e :
46 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ cor ’ ]
= ’ b lack ’
47
48 f o r ind i c e , va l o r in enumerate ( s e l f . DICSSIDs [ s e l f .
s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) :
49 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’
] [ i n d i c e ] = None
50 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ epoch
’ ] [ i n d i c e ] = None
51
52 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] . append
( s e l f . r s s i a t u a l )
53 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ epoch ’ ] .
append ( i n t ( time . time ( ) ) )
54 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ med ia r s s i ’ ] =
f l o a t (sum( s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] [ 6 0 :
l en ( s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) −1]) / ( l en (
s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) −60) )
55
56
57 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ e x i s t e ’ ] = 0
58 f o r s e l f . a in s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [
’ r s s i ’ ] [ l en ( s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) −10:
l en ( s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) ] :
59 i f s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’
] [ l en ( s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’ r s s i ’ ] ) −1] != s e l f
. a :
60 s e l f . DICSSIDs [ s e l f . s s i d a t u a l ] [ s e l f . b s s i d a tua l ] [ ’
36
e x i s t e ’ ] = 1
61 break
62 return
Na linha 1 foi criado o dicionario self.DICSSIDs. Este dicionario e o mais impor-
tante do codigo, pois ele guardara as informacoes de todos os BSSIDs e de seus respectivos
SSIDs.
A variavel self.executathread e uma variavel booleana e sera responsavel por
determinar se o thread criado na linha seguinte continuara a ser executado ou nao. Essa
variavel recebera False quando a janela principal do software for fechada.
O thread self.threadalimenta executa a funcao self.alimentalista paralelamente
ao thread principal do programa. Essa forma permite que a interface grafica do software
nao sofra interrupcoes quando for feito o scan na interface Wi-Fi. Esse scan leva entre 2
e 3 segundos para ser executado. Caso o scan fizesse parte do fluxo principal do codigo,
ele causaria uma interrupcao no mesmo. Este thread e iniciado na linha 4.
Funcao self.alimentalista
Esta funcao inicia sua execucao verificando a situacao da variavel self.executathread.
Caso a variavel seja verdadeira, ela continua sua execucao, caso nao seja, a funcao e fina-
lizada e, por sua vez, o thread tambem.
O loop da linha 8 e responsavel por verificar se os dados foram extraıdos correta-
mente na linha 9. A linha 9 armazena a saıda do comando iwlist executado por meio do
metodo os.popen na variavel self.saidaiwlist. Esta saıda e um arquivo que e lido para
a variavel string self.strsaidaiwlist. Caso esta variavel seja nula, ou seja, nao tenha
conteudo, indicando que o comando nao foi bem sucedido, o loop da linha 8 recomeca.
Na linha 15 e feito um split da string extraıda para que seja criada uma lista com
cada linha de saıda do comando. O resultado e armazenado na lista self.liststrsaidaiwlist
Foi concluıdo a partir de testes que cada celula (BSSID) extraıda ocupa 7 linhas
de saıda do comando, portanto, o tamanho da lista com as linhas de saıda e dividido por
7 para saber a quantidade de celulas capturadas.
O loop da linha 18 e feito para cada celula (BSSID) capturada. Na linha 19,
sao selecionados os elementos da lista self.liststrsaidaiwlist correspondentes ao BSSID
atual. Comeca entao o parse das informacoes do referido BSSID.
37
As informacoes capturadas sao:
• SSID
• BSSID
• RSSI
• Canal
Comeca, entao, a insercao dessas informacoes no dicionario self.DICSSIDs.
Funciona da seguinte forma:
• Dentro do dicionario self.DICSSIDs foram colocados outros dicionarios referentes
aos SSIDs encontrados no scan da interface Wi-Fi do notebook usado. As keys
desses dicionarios sao os nomes do SSIDs encontrados. No codigo, isso e feito na
linha 26 e 27. Caso o SSID do loop atual nao esteja no dicionario self.DICSSIDs,
ele e inserido.
• Dentro de cada dicionario correspondente a um SSID, sao colocados outros diciona-
rios correspondentes aos BSSIDs que tem o mesmo SSID. Isso e feito nas linhas 29
e 30.
• Na linha 31 o canal do BSSID do loop atual e colocado dentro do dicionario do
BSSID.
• Nas linhas 32 e 33, o RSSI e o epoch time sao criados como listas de tamanho 60 para
que, na ocasiao da plotagem, eles tenham o tamanho correspondente as posicoes do
grafico. Para cada RSSI, um epoch time e calculado, para saber qual foi o momento
da captura daquela informacao.
• As linhas 36 a 46 determinam a cor com a qual aquele BSSID sera plotado no grafico
de acordo com o seu canal.
• Na linha 48 inicia um loop que coloca em todas as posicoes das listas de RSSI e
epoch time o valor None, para que, na ocasiao do inıcio da plotagem, somente tenha
informacao no extremo direito do grafico.
• Apos este loop, os valores atuais de RSSI e epoch time sao colocados no fim da lista
como primeiros valores reais. Isso acontece nas linhas 52 e 53.
38
• Calcula-se entao, a media de RSSI daquele BSSID, tomando somente os valores
reais como entrada do calculo.
• Na linha 57 e iniciado um processo que verifica se o referido BSSID ainda esta sendo
capturado pela interface Wi-Fi. Isso e verificado observando as ultimas insercoes na
lista de RSSI. Caso existam mais de 10 insercoes iguais, foi inferido por testes, que
o BSSID nao esta mais sendo capturado e ele recebe o valor 0 no campo existe.
Essa funcao e executada ininterruptamente e alimenta o dicionario self.DICSSIDs
com as informacoes obtidas.
4.3.4 Plotagem dos Graficos
Os graficos sao plotados com auxilio da biblioteca matplotlib. A importacao da
biblioteca e de alguns de seus metodos e feita da seguinte forma:
1 ## Importar b i b l i o t e c a s para o g r a f i c o tempo r e a l
2 import matp lo t l i b # B ib l i o t e c a usada para ge ra r g r a f i c o s do e s t i l o do
matlab
3 matp lo t l i b . use ( ”TkAgg”)
4 from matp lo t l i b . backends . backend tkagg import FigureCanvasTkAgg
5 from matp lo t l i b . f i g u r e import Figure
6 from matp lo t l i b import s t y l e
7 s t y l e . use ( ’ ggp lo t ’ )
8 import matp lo t l i b . animation as animation
A biblioteca geral e importada na linha 2.
Na linha 3, e utilizado um metodo desconhecido pelos autores do trabalho.
Na linha 4 e importado um metodo para a criacao de um Canvas especial para
receber o grafico dinamico da biblioteca.
Na linha 8 e importado o metodo matplotlib.animation. Essa funcao e respon-
savel por atualizar o grafico em intervalos regulares definidos pelo usuario. Essas atuali-
zacoes serao responsaveis por mostrar o RSSI do referido BSSID ”avancando”no grafico
conforme novas medidas sao feitas pelo comando iwlist e colocadas nos dicionarios.
A parte do codigo que constroi o grafico e feita em conjunto com o Tkinter e sera
mostrada a seguir. Esse codigo se refere ao grafico que mostra somente um SSID e seus
BSSIDs. O grafico que mostra todos os SSIDs e feito de forma analoga.
39
1 # Criacao do canvas onde se ra mostrado o g r a f i c o
2 # Uti l i zamos a b i b l i o t e c a do matp lo t l i b para mostrar um g r a f i c o que
s e ra a tua l i z ado em tempo r e a l .
3 # Primeiro cr iamos uma f i g u r a onde o g r a f i c o s e ra mostrado
4
5 s e l f . Figura SSID = Figure ( f i g s i z e =(10 ,8) , dpi=100)
6 s e l f . Graf ico SSID = s e l f . Figura SSID . add subplot (111)
7
8 # Criacao do Canvas SSID , onde s e ra co locada a f i g u r a do g r a f i c o
9 s e l f . Canvas SSID = FigureCanvasTkAgg ( s e l f . Figura SSID , s e l f . Aba SSID)
10 s e l f . Canvas SSID . show ( )
11 s e l f . Canvas SSIDMAT = s e l f . Canvas SSID . ge t tk w idge t ( )
12 s e l f . Canvas SSIDMAT . p lace ( r e l x =0.05 , r e l y =0.1 , r e l h e i g h t =0.85 , r e lw id th
=0.9)
13 s e l f . Canvas SSIDMAT . con f i gu r e ( background=”white ”)
14 s e l f . Canvas SSIDMAT . con f i gu r e ( borderwidth=”2 ”)
15 s e l f . Canvas SSIDMAT . con f i gu r e ( r e l i e f=tk .RIDGE)
16 s e l f . Canvas SSIDMAT . con f i gu r e ( se l ec tbackground=”#c4c4c4 ”)
17 s e l f . Canvas SSIDMAT . con f i gu r e ( take f o cus=”0 ”)
18 s e l f . Canvas SSIDMAT . con f i gu r e ( width=744)
19 s e l f . d e c i s a o s s i d = 0
20 s e l f . a n i s s i d = animation . FuncAnimation ( s e l f . Figura SSID , s e l f .
an imate ss id , i n t e r v a l =500)
E criada uma figura a partir do metodo Figure importado do matplotlib com
algumas caracterısticas. A esta figura e associado um grafico de estilo subplot, assim como
no MATLAB. Para realizar esta operacao o metodo add subplot() e utilizado.
E criado, entao, um widget Canvas especial para o matplotlib com o metodo Fi-
gureCanvasTkAgg(). Sao passados como parametros a figura que possui o subplot e o
Frame no qual serao colocados estes widgets. Este Canvas e especial, mas internamente,
cria um Canvas normal do Tkinter. E com esse Canvas do Tkinter que as operacoes
graficas serao feitas.
O metodo place e utilizado para posiciona-lo no seu Frame mestre.
Ao fim das configuracoes do Frame, a variavel self.decisao ssid e criada para ser
usada na funcao self.buttonHandler explicada anteriormente.
Apos isso, o metodo animation.FuncAnimation() e utilizado. Ele aponta para
40
uma funcao chamada self.animate ssid passando como parametros a figura onde esta o
grafico e a variavel interval. Esta variavel determina o intervalo, em milissegundos, entre
as atualizacoes do grafico. O intevalo escolhido foi 500 milissegundos.
A funcao self.animate ssid e feita da seguinte forma:
1 de f an imate s s id ( s e l f , i ) :
2 s e l f . dropdownSSID [ ’ va lue s ’ ] = s e l f . DICSSIDs . keys ( )
3 i f s e l f . d e c i s a o s s i d :
4 s e l f . Graf ico SSID . c l e a r ( )
5 s e l f . horaatua l = time . s t r f t ime ( ”%H:%M:%S”)
6 s e l f . horamenos15 = datet ime . datet ime . s t rpt ime ( s e l f . horaatual , ’%H
:%M:%S ’ ) − datet ime . t imede l ta (0 ,15 )
7 s e l f . horamenos30 = datet ime . datet ime . s t rpt ime ( s e l f . horaatual , ’%H
:%M:%S ’ ) − datet ime . t imede l ta (0 ,30 )
8 s e l f . horamenos45 = datet ime . datet ime . s t rpt ime ( s e l f . horaatual , ’%H
:%M:%S ’ ) − datet ime . t imede l ta (0 ,45 )
9 s e l f . horamenos60 = datet ime . datet ime . s t rpt ime ( s e l f . horaatual , ’%H
:%M:%S ’ ) − datet ime . t imede l ta (0 ,60 )
10
11 f o r s e l f . b s s i d in s e l f . DICSSIDs [ s e l f . v a r i a b l e . get ( ) ] . keys ( ) :
12 i f s e l f . DICSSIDs [ s e l f . v a r i a b l e . get ( ) ] [ s e l f . b s s i d ] [ ’ e x i s t e ’ ]
== 0 :
13 cont inue
14
15 ## Rotina para nao p l o t a r c e l u l a s (BSSIDs ) que somem
16 # Por padrao do software , quando um BSSID some , o programa
repe t e o ult imo r s s i por 13 vezes antes de parar de a t u a l i z a r . Ess
r o t i na t e s t a i s s o e se os u l t imos 10 r s s i foram igua i s , param o p l o t a r a
c e l u l a
17
18 s e l f . Graf ico SSID . p l o t ( s e l f . DICSSIDs [ s e l f . v a r i ab l e . get ( ) ] [
s e l f . b s s i d ] [ ’ r s s i ’ ] [ l en ( s e l f . DICSSIDs [ s e l f . v a r i a b l e . get ( ) ] [ s e l f . b s s i d ] [ ’
r s s i ’ ] ) −60: l en ( s e l f . DICSSIDs [ s e l f . v a r i ab l e . get ( ) ] [ s e l f . b s s i d ] [ ’ r s s i ’ ] ) ] ,
s e l f . DICSSIDs [ s e l f . v a r i ab l e . get ( ) ] [ s e l f . b s s i d ] [ ’ cor ’ ] )
19 s e l f . Graf ico SSID . t ext (57 , s e l f . DICSSIDs [ s e l f . v a r i a b l e . get ( )
] [ s e l f . b s s i d ] [ ’ r s s i ’ ] [ l en ( s e l f . DICSSIDs [ s e l f . v a r i a b l e . get ( ) ] [ s e l f . b s s i d
] [ ’ r s s i ’ ] ) −1] , s e l f . bss id , bbox=d i c t ( f a c e c o l o r=s e l f . DICSSIDs [ s e l f .
v a r i a b l e . get ( ) ] [ s e l f . b s s i d ] [ ’ cor ’ ] , a lpha =0.5) )
20 s e l f . Graf ico SSID . s e t x t i c k s ( [ 0 , 15 , 30 , 45 , 6 0 ] )
41
21 s e l f . Graf ico SSID . s e t x t i c k l a b e l s ( [ s t r ( s e l f . horamenos60 . time
( ) ) , s t r ( s e l f . horamenos45 . time ( ) ) , s t r ( s e l f . horamenos30 . time ( ) ) , s t r (
s e l f . horamenos15 . time ( ) ) , s e l f . horaatua l ] )
22
23 s e l f . Graf ico SSID . s e t x l a b e l ( ’Tempo ’ )
24 s e l f . Graf ico SSID . s e t y l a b e l ( ’RSSI em dBm’ )
25 s e l f . Graf ico SSID . s e t t i t l e ( ’ Gra f i co por SSID ’ )
No inıcio da funcao, a lista de SSIDs e atualizada pra ser mostrada na drop down
list, pois a cada vez que o programa captura dados, pode ser encontrado um novo SSID
e isso precisa ser mostrado na lista de SSIDs disponıveis.
Na linha 3 e efetuado o teste da variavel self.decisao ssid que determina se o
grafico vai ser atualizado ou nao.
O metodo clear() limpa o grafico para a nova disposicao dos dados.
Da linha 5 a linha 9 e feito um calculo para determinar a hora atual e valores de
intervalos que serao utilizados para o eixo horizontal do grafico. Intervalos de 15 segundos
sao calculados.
Na linha 11, e iniciado um loop em todos os BSSIDs do SSID escolhido. Ele esta
armazenado na variavel self.variable e para recebe-lo como uma string, o metodo get()
foi utilizado.
Na linha 12 e feito um teste para saber se aquele BSSID ainda esta ativo e sendo
detectado pelo notebook. A key existe foi explicada na secao de captura de dados.
Na linha 18 e feita insercao dos dados no grafico por meio do metodo plot. Este
metodo recebe como parametros os valores do eixo vertical e a cor com a qual o BSSID
sera plotado.
E passado como parametro a lista que contem o RSSI recebido do BSSID em
questao ao longo do tempo, mas somente os ultimos 60 valores, para que seja plotado 1
minuto de capturas.
E mostrado tambem, na extrema direita do grafico, logo em cima da ultima me-
dicao, o BSSID em questao em sua forma hexadecimal para facilitar a compreensao do
grafico. Isso e feito na linha 19 por meio do metodo text que recebe como parametro a
posicao do grafico na qual a caixa de texto sera inserida e qual sera sua cor.
As linhas 20 e 21 determinam em que posicoes do eixo horizontal, os instantes de
tempo serao mostrados e quais os seus valores.
42
As linhas 23, 24 e 25 determinam os tıtulos dos eixos horizontal, vertical e do
grafico por meio dos metodos set xlabel, set ylabel e set title.
Segue o resultado da interacao entre a captura de dados e construcao da interface:
Figura 4.5: Apresentacao da Interface Grafica com a Captura dos Dados
4.3.5 Geracao do Relatorio
Este software tem a possibilidade de gerar um grafico em PDF com os dados
capturados ate o momento da geracao. Esta possibilidade e dada por meio da biblioteca
Gnuplot.
O relatorio e gerado com o seguinte codigo:
1 de f gerarPDF ( s e l f ) :
2 f o r s e l f . s s i dpd f in s e l f . DICSSIDs . keys ( ) :
3 s e l f . g = Gnuplot . Gnuplot ( )
4 s e l f . g ( ” s e t te rmina l pdf monochrome enhanced s i z e 30cm,15cm”)
5 s e l f . g ( ” s e t output ’/home/devbru ubuntu/Dropbox/TCC/ r s s i py thon /
WiFindv20112017/ ”+s e l f . s s i dpd f+” . pdf ’ ”)
6 f o r s e l f . b s s idpd f in s e l f . DICSSIDs [ s e l f . s s i dpd f ] . keys ( ) :
7 s e l f . g . t i t l e ( ’Dados do BSSID ’+s e l f . b s s idpd f )
43
8 s e l f . g . x l ab e l ( ”Epoch Time (H:M: S) ”)
9 s e l f . g . y l ab e l ( ”RSSI em dBm”)
10 s e l f . g ( ” s e t g r id ”)
11 s e l f . t empo in i c i o = s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f
] [ ’ epoch ’ ] [ 6 1 ] − 5
12 s e l f . tempofim = s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’
epoch ’ ] [ l en ( s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’ epoch ’ ] ) −1] + 5
13 s e l f . g ( ” s e t xdata time ”)
14 s e l f . g ( ’ s e t timefmt ”%s ” ’ )
15 s e l f . g ( ’ s e t format x ”%m/%d/%Y %H:%M:%S” ’ )
16 exec ( ” s e l f . g ( ’ s e t xrange [%s :%s ] ’ ) ” % ( s e l f . t empoin ic io , s e l f
. tempofim ) ) in l o c a l s ( )
17 s e l f . g ( ” s e t yrange [−90:−15] ”)
18 s e l f . g ( ” s e t y t i c 20 ”)
19 s e l f . g ( ” s e t x t i c s r o t a t e by −45”)
20 s e l f . g ( ’ s e t key noenhanced ’ )
21
22 s e l f . y r s s i = s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’ r s s i
’ ] [ 6 1 : l en ( s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’ r s s i ’ ] ) −1]
23
24 s e l f . x r s s i = s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’
epoch ’ ] [ 6 1 : l en ( s e l f . DICSSIDs [ s e l f . s s i dpd f ] [ s e l f . b s s idpd f ] [ ’ epoch ’ ] ) −1]
25
26 s e l f . d ado s r s s i = Gnuplot . Data (numpy . array ( s e l f . x r s s i , dtype =
numpy . f l o a t 6 4 ) , numpy . array ( s e l f . y r s s i , dtype = numpy . f l o a t 6 4 ) , t i t l e=”
RSSI do BSSID : ”+s e l f . bss idpdf , with =” l i n e s ” , us ing=’ 1 :2 ’ )
27 s e l f . g . p l o t ( s e l f . d ado s r s s i )
28 de l s e l f . g
O software gera um PDF para cada SSID encontrado e um grafico, dentro do PDF
para cada BSSID.
Na linha 2 e iniciado um loop em todos os SSIDs encontrados pela interface Wi-Fi
do notebook e armazenados no dicionario self.DICSSIDs.
Para cada SSID e criada uma instancia do Gnuplot chamada self.g. O metodo
tambem chamado Gnuplot realiza ese operacao. Ele permite que sejam executados co-
mandos do programa Gnuplot dentro do Python.
Nas linhas 4 e 5 o formato do arquivo de saıda e escolhido como PDF e seu endereco
44
e nome sao informados como uma concatenacao de strings para que cada SSID tenha um
arquivo de saıda diferente.
Na linha 6 e iniciado um loop em todos os BSSIDs do SSID em questao. Para
cada BSSID, entao, e criado um grafico.
Existem diversos parametros para configurar um grafico e os mesmos nao serao
detalhados aqui.
Na linha 22 os dados referentes ao eixo vertical sao colocados na variavel self.yrssi
como sendo a lista de RSSI do BSSID em questao comecando pela posicao 61, pois as
primeiras 60 posicoes estao marcadas com None conforme explicado na secao de captura
de dados.
Na linha 24, os dados referentes ao eixo horizontal sao colocados na variavel
self.xrssi como sendo a lista de epoch time, tambem comecando pela posicao 61.
Na linha 26, foi usado o metodo Gnuplot.Data para associar estas duas listas
como sendo entrada de um arquivo de dados que serao plotadas no grafico a partir do
metodo plot na linha 27. Tambem sao escolhidos, neste metodo Gnuplot.Data a forma
da linha e o tıtulo do gradfico.
Por fim, a instancia self.g e deletada e o arquivo PDF e criado.
Segue foto referente a um arquivo PDF resultante desta operacao:
Figura 4.6: Grafico do Arquivo em PDF
Capıtulo 5
Aplicacoes
5.1 Aplicacoes do Software
O software criado funciona como uma ferramenta de estudo de ambientes Wi-Fi.
Este estudo e dimensionamento e tambem conhecido como Site Survey.
Um Site Survey realizado com qualidade impactara positivamente na distribuicao
de sinal da WLAN, com isso melhorando as taxas de comunicacao dos enlaces ponto de
acesso - clientes.
O software e capaz de auxiliar os Sites Surveys tanto para dimensionar novos
ambientes, quanto para estudar possıveis melhorias em ambientes Wi-Fi ja existentes.
Para dimensionamento de novos ambiente Wi-Fi, o software pode ser utilizado
para determinar o tamanho das celulas, indicando a quantidade e a posicao dos pontos
de acesso. Este objetivo sera alcancado atraves de uma potencia mınima de recepcao de
sinal pre estabelecida, que varia de acordo com a necessidade do enlace de alcancar taxas
mınimas que garantirao o funcionamento de suas aplicacoes.
A partir de um ponto inicial, que sera imediatamente ao lado do ponto de acesso,
o agente caminha com o notebook, que estara executando o software, ate o ponto em que
for alcancada a potencia mınima de recepcao, estabelecendo assim o tamanho daquela
celula e seguindo consecutivamente, dimensionara a quantidade de pontos de acesso no
ambiente.
Para um estudo de possıveis melhorias de ambientes Wi-Fi, o software podera
identificar areas de sombras da cobertura atual e identificar possıveis realocacoes de canais
de respectivos BSSIDs.
45
46
As areas de sombra poderao ser identificadas atraves dos graficos do nosso soft-
ware que indicarao os pontos onde a potencia recebida esta menor do que a mınima pre
estabelecida.
Como o software identifica os canais em que se encontram os BSSIDs, atraves dele,
identifica-se possıveis BSSIDs de terceiros causando interferencia na WLAN estudada,
nao estando alocados em canais ortogonais aos 1, 6 e 11, ou causando super lotacao em
um desses canais ortogonais fazendo com que seja necessario uma realocacao de alguns
BSSIDs nos canais da banda de 2,4 GHz.
Afim de documentar estas analises das redes e para ter estes dados colhidos para
analises futuras, o software ainda conta com a geracao do PDF s para estas finalidades.
Alem de servir como ferramenta para os Site Surveys, como foi pensado, ele tambem
pode servir para analisar o desempenho do roaming dos dispositivos finais.
Colocando este dispositivo final do lado do notebook que executara o software, esta
analise pode ser feita comparando o ponto de acesso que o dispositivo esta conectado em
relacao a potencia de recepcao que o software estara mostrando de outros BSSIDs da
mesma rede, de acordo com a movimentacao dos equipamentos ao longo da area, sendo
possıvel identificar a eficiencia com a qual o dispositivo realiza o roaming.
Capıtulo 6
Testes em Ambiente Operacional
Para fim de demonstracao do software, sera descrito e apresentado o resultado de
um teste realizado em um ambiente Wi-Fi operacional, dentro do escritorio da empresa
Nimal Tecnologia, no Centro de Niteroi-RJ, que se encontra em algumas salas de um
predio comercial.
Este teste foi realizado em uma quinta-feira, dentro do horario comercial.
6.1 Descricao do Teste
O teste foi realizado no seguinte notebook e suas configuracoes:
• Fabricante: Acer
• Modelo: Aspire E1-571
• Processador: Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
• RAM: 6 GB
• HD: 500 GB
• Sistema Operacional: Ubuntu 16.04.3 LTS
O teste foi dividido em duas analises: uma analise estatica para verificar a quanti-
dade de BSSIDs que cobriam o ambiente; e uma analise dinamica, percorrendo o ambiente,
para verificar a distribuicao do sinal em toda area do escritorio da empresa.
47
48
• A analise estatica consistiu na coleta de dados de potencia recebida de todos os BS-
SIDs. O notebook que utilizava o software estava em um ponto central do escritorio
e, entao, foi tirada uma foto do grafico com todos os BSSIDs presentes no ambiente
naquele momento.
• A analise dinamica foi feita movendo o notebook, no qual o software estava sendo
executado, por todo o ambiente estudado, passando proximo dos tres pontos de
acesso da empresa, para verificar a flutuacao das potencias recebidas pelo software,
e pelos pontos mais distantes de todos os pontos de acesso, para verificar a qualidade
da cobertura.
Para facilitar a leitura do grafico, os tres pontos de acesso foram colocados em canais
diferentes, distribuıdos nos canais 1, 6 e 11.
O SSID que serviu para estudar a cobertura foi o ”Nimal”, um dos SSIDs da empresa
que estao nos tes pontos de acesso.
6.2 Resultados dos Testes e Possıveis melhorias
A partir dos testes descritos nas secoes anteriores, foram recolhidos imagens para
analisar cada proposta.
• No analise estatica, a imagem a seguir mostra a quantidade de BSSIDs no ponto
analisado e os canais que ocupam.
Pode-se analisar, com a imagem gerada pelo grafico, a quantidade de BSSIDs alo-
cados no canal 6. Devido a estas caracterısticas, deve-se evitar este canal, para que
se alcance maiores taxas de comunicacao entre o ponto de acesso e o cliente.
Foram verificados, tambem, alguns BSSIDs em canais que nao sao ortogonais, que
causaram interferencia na rede. Para evitar estas interferencias sera necessario ve-
rificar quais canais sao esses e evitar seus vizinhos. Alem disso, pode-se entrar em
contato com os responsaveis dos pontos de acesso que estao irradiando estas redes
e explicar o motivo de nao ser adequada a operacao nos canais nao-ortogonais.
• Na analise dinamica, a imagem a seguir mostra a potencia de recepcao em todo o
ambiente analisado, apenas do SSID ”Nimal”, para estudo da cobertura dos tres
pontos de acesso da Empresa.
49
Figura 6.1: Scan Geral de Todos os BSSIDs do ambiente
E importante informar que as coletas dos dados foram feitas em uma velocidade
justa, em acordo com o tempo em que o software demora para colher os dados,
garantindo a melhor leitura possıvel do ambiente.
Como este teste foi feito movendo o notebook por todo o ambiente, verifica-se que o
mesmo recebe, em instante diferentes, uma potencia maior de diferentes pontos de
acesso, conforme passa mais proximo a um deles.
Para analisar a cobertura em todo o escritorio da empresa, leva-se em conta o ponto
em que se obteve a menor potencia de recepcao, do ponto de acesso com a maior
potencia. Como verifica-se na Figura 6.2, neste ponto verifica-se uma potencia de
recepcao maior do que -70dBm.
Como os pontos de acesso da empresa contem a tecnologia IEEE 802.11n, estima-
se que dentro dessas mınimas potencia recebidas no ambiente e a quantidade de
usuarios medios por ponto de acesso, ainda se consegue uma taxa de comunicacao,
cliente - ponto de acesso, suficiente para as aplicacoes utilizadas.
A relacao qualidade do link x potencia de recepcao e fundamentada pela tabela
mostrada na Figura 2.5.
50
Figura 6.2: Potencia recebida em todo ambiente analisado
Para registro desse estudo, o programa gerou um PDF para cada ponto de acesso,
o primeiro ponto de acesso, na Figura 6.3, o segundo, na Figura 6.4, e o terceiro,
na Figura 6.5.
Figura 6.3: Potencia recebida em ao longo do tempo em PDF, ponto de acesso 1
51
Figura 6.4: Potencia recebida em ao longo do tempo em PDF, ponto de acesso 2
Figura 6.5: Potencia recebida em ao longo do tempo em PDF, ponto de acesso 3
Capıtulo 7
Conclusao e Trabalhos Futuros
7.1 Conclusao
A proposta do inıcio desse trabalho foi elaborar uma ferramenta que ajudasse
a estudar um ambiente Wi-Fi, capaz de dimensionar novas redes e identificar possıveis
melhorias para redes ja existentes.
Durante o decorrer do processo de criacao desta ferramenta foram abordados con-
ceitos importantes, que dao o suporte para que as redes IEEE 802.11 possam ter o desem-
penho que tem hoje. Este estudo possibilitou a elaboracao do software para servir como
a ferramenta desejada.
No processo de criacao do software, depois de todos os conceitos entendidos,
abordou-se sobre o comando iwlist do Linux, que possibilitou adquirir os dados neces-
sarios do ambiente para um estudo adequado. Depois da ideia formada, foi necessario
dominar melhor a linguagem de programacao, Phyton, que possibilitou a criacao do soft-
ware.
Apos a conclusao do software, algumas limitacoes fısicas foram encontradas no que
tange a coleta de dados que, apesar de ser mais lenta do que se esperava, nao limitou o
estudo do ambiente como era desejado. Esperavamos que o comando iwlist apresentasse
sua saıda com um intervalo da ordem de microssegundos, mas o mesmo tem uma duracao
de 2s aproximadamente.
Para comprovar a utilidade do software criado como ferramenta de estudo de ambi-
entes Wi-Fi, foram realizados alguns testes em um ambiente corporativo, que conseguiram
identificar as caracterısticas de RF do escritorio no que diz respeito as WLANs desejadas
e as outras que atrapalhavam o seu desempenho.
Pode-se, enfim, concluir que foi obtido um resultado satisfatorio tanto para o soft-
ware quanto para o conhecimento adquirido.
7.2 Sugestoes para Trabalhos Futuros
O software encontra-se operacional para os objetivos pretendidos, entretanto, sem-
pre existem possıveis melhorias que podem ser feitas e novas funcionalidades a se incor-
porar ao trabalho.
Tendo isso em vista, algumas dessas ideias serao listadas aqui como possıveis tra-
balhos futuros. Sao eles:
• Banda de 5 GHz
O software opera na banda de 2,4GHz, pois e a faixa de operacao mais usada e a
unica suportada pela interface WiFi do notebook. Entretanto, a faixa de 5GHz vem
crescendo em numero de usuarios e equipamentos suportados por diversos fatores.
Por isso, incorporar o suporte a essa faixa ao software e interessante. A aquisicao
de uma nova interface WiFi que opere em 5GHz sera necessaria para adicionar tal
funcionalidade.
• Classificacao dos Canais Nao-Ortogonais aos Canais 1, 6 e 11
Na versao atual do software, somente os canais 1, 6 e 11 possuem cores para
diferencia-los. Todos os outros sao mostrados com a cor preta. A identificacao
de todos os canais trara mais fidelidade aos dados obtidos, permitindo uma melhor
alocacao dos pontos de acesso estudados.
• Grafico da Ocupacao dos Canais
Outro grafico interessante a ser adicionado ao software de acordo com os dados que
sao colhidos pelo comando iwlist e o grafico de ocupacao dos canais. Este grafico
mostrara barras com a quantidade de BSSIDs por canal. Isso permitira ao usuario
verificar quais canais estao mais ocupados.
54
Referencias Bibliograficas
[1] Abreu, Estela dos Santos e Teixeira, Jose Carlos Abreu. Apresentacao de Trabalhos
Monograficos de Conclusao de Curso, 8a. edicao revisada, EdUFF, 2005.
[2] (Wi-Fi bate 3G e 4G na preferencia do brasileiro para se conectar
pelo celular), http://g1.globo.com/tecnologia/noticia/2016/09/wi-fi-bate-3g-e-4g-na-
preferencia-do-brasileiro-para-se-conectar-pelo-celular.html, Acessado em 10 de outu-
bro de 2017
[3] (About IEEE), https://www.ieee.org/about/index.html
[4] (WiFi Overview), http://www.blacklabssecurity.info/wifi-overview.html
[5] (Cisco Prime Network Control System Configuration Guide, Re-
lease 1.0), https://www.cisco.com/c/en/us/td/docs/wireless/ncs/1-
0/configuration/guide/NCS10cg/wipsench.html
[6] (Wireless Clients Roaming), https://supportforums.cisco.com/t5/getting-started-
with-wireless/wireless-clients-roaming/td-p/1932596
[7] (ExtremeWireless™ WiNG 7522 802.11ac Access Point), https://kapost-files-
prod.s3.amazonaws.com/kapost/55ba7c9e07003d9aab000394/studio/content/581c9a5332dbdb91bc000243/published/ap-
7522-data-sheet-1.pdf?kui=WFm8j4 zUcaLgcrDc5 iJg
[8] (Canais Wi-Fi 2.4 GHz), https://www.palpitedigital.com/wp-
content/uploads/2012/03/canais-wifi-frequencias.png
[9] (Canais da Tecnologia DSSS), http://netsthpks.com/pics/wifi-s.gif
[10] (Channel Bonding In WiFi: Rules And Regulations),
https://www.networkcomputing.com/wireless/channel-bonding-wifi-rules-and-
regulations/199326059
55
[11] (Probe Request - Probe Response), https://documentation.meraki.com/@api/deki/files/1853/3d40e28a-
8813-4b79-8ddb-fb395d1e1fba?revision=1
[12] (What is Linux ), https://www.linux.com/what-is-linux
[13] (The Making of Python), http://www.artima.com/intv/pythonP.html
[14] (Converting Signal Strength Percentage to dBm Values),
http://www.ieee802.org/16/tgd/contrib/C80216d-03 92.pdf
[15] (Tkinter: Interfaces graficas em Python), https://www.devmedia.com.br/tkinter-
interfaces-graficas-em-python/33956
[16] GAST, Matthew, 802.11® Wireless Networks The Definitive Guide, O’REILLY,
2005.
[17] COLEMAN, David D. and WESTCOTT, David A., CWNA: Certified Wireless
Network Administrator - Official Study Guide - Fourth Edition, Sybex, 2014.