Hacking Ético com Python para Iniciantes
Hacking Ético com Python para Iniciantes
Sanjib Sinha
Sanjib Sinha
Howrah, Bengala Ocidental, Índia
Qualquer código-fonte ou outros materiais suplementares mencionados pelo autor neste texto
estão disponíveis para os leitores em [Link] . Para obter
informações detalhadas sobre como localizar o código-fonte do seu livro, acesse
[Link]/source-code/ . Os leitores também podem acessar o código-
fonte no SpringerLink na seção Supplementary Material de cada capítulo.
Este trabalho está sujeito a direitos autorais. Todos os direitos são reservados pela Editora,
quer a totalidade ou parte do material esteja em causa, nomeadamente os direitos de tradução,
reimpressão, reutilização de ilustrações, recitação, difusão, reprodução em microfilmes ou de
qualquer outra forma física, e transmissão ou armazenamento de informação e recuperação,
adaptação eletrônica, software de computador ou por metodologia semelhante ou diferente agora
conhecida ou futuramente desenvolvida.
Nomes, logotipos e imagens de marcas registradas podem aparecer neste livro. Em vez de
usar um símbolo de marca registrada com todas as ocorrências de um nome, logotipo ou
imagem de marca registrada, usamos os nomes, logotipos e imagens apenas de forma editorial
e para benefício do proprietário da marca registrada, sem intenção de infringir a marca registrada.
O uso nesta publicação de nomes comerciais, marcas registradas, marcas de serviço e termos
semelhantes, mesmo que não sejam identificados como tal, não deve ser considerado uma
expressão de opinião sobre se estão ou não sujeitos a direitos de propriedade.
pode ser feito. O editor não oferece nenhuma garantia, expressa ou implícita, com
relação ao material aqui contido.
Vamos esclarecer primeiro: o Ethical Hacking não está associado a nenhum tipo de
atividades eletrônicas ilegais. Eles sempre ficam dentro das leis. Este livro é
destinado àquelas pessoas – jovens e idosos – que são criativas e curiosas e que desejam
desenvolver um hobby criativo ou assumir a profissão de segurança na Internet atuando como
hacker ético. Tendo isso em mente, também aprenderemos a linguagem de programação
Python 3 para aprimorar nossa habilidade como hackers éticos.
Este livro não se destina a nenhum tipo de usuário mal-intencionado. Se alguém tentar
usar este livro ou qualquer tipo de exemplo de código deste livro para fins ilegais, este livro
não assumirá responsabilidade moral por esses comportamentos maliciosos.
Se você acha que pode usar este livro para qualquer finalidade maliciosa, então você
são aconselhados a ler o primeiro capítulo “Legal Side of Ethical Hacking”. Espero que
você não goste da ideia de acabar na prisão por danificar alguns outros sistemas.
Gostaria de começar esta breve introdução com uma imagem. Esta imagem retrata
muitas coisas que mais tarde discutirei em detalhes. Ele diz: “O autor está usando a
distribuição Linux “Ubuntu” como seu sistema operacional padrão. Ele instalou o Virtual
Box – uma espécie de máquina virtual – que roda também no Windows.
E nessa Virtual Box ele instalou mais três sistemas operacionais. Um é “Windows XP” e os
outros dois são “Kali Linux” e “Windows 7 Ultimate”.
A imagem também diz, e isso é muito importante, “Atualmente três sistemas operacionais
estão rodando virtualmente no desktop”.
Machine Translated by Google
( A caixa virtual está executando três sistemas operacionais. Você pode tentar qualquer
tipo de experimento neste sistema operacional virtual. Isso não danificará seu sistema
principal. )
Como um hacker ético, você aprenderá como se defender. Para se defender às vezes
você precisa atacar seu inimigo. Mas é uma parte do seu sistema de defesa. É uma parte
de sua estratégia de defesa. Quanto mais você souber sobre a estratégia de seu inimigo, mais
poderá se defender. Você precisa aprender que essas ferramentas são usadas com frequência
por hackers ou crackers mal-intencionados. Eles usam a mesma ferramenta que você usa para se
defender.
Seja você um hacker ético ou um cracker malicioso, você faz o mesmo
coisa. Você usa ferramentas de software idênticas para atacar o sistema de segurança. Apenas
seu propósito ou intenção é diferente.
Provavelmente você sabe que uma grande montadora antes de lançar um novo modelo
do carro geralmente testa o sistema de travamento. Eles têm seus próprios engenheiros
de segurança e, além disso, chamam os especialistas em bloqueio para testar a vulnerabilidade.
Eles pagam uma boa quantia em dinheiro se você conseguir quebrar o sistema de travamento
do carro. Basicamente é um trabalho de “PENTESTING”. Os especialistas em travamento
PENTEAM o sistema e verificam se há algum ponto fraco no sistema.
É um bom exemplo de hacking ético. Os especialistas em travamento são convidados a fazer
o trabalho e são bem pagos. Pelo contrário, os ladrões de carros fazem o mesmo trabalho
sem nenhum convite. Eles simplesmente quebram o sistema de travamento de um carro
estacionado na beira da estrada e o levam embora. Espero que agora você tenha
Machine Translated by Google
1. Disponibilidade
2. Integridade
3. Autenticidade
4. Confidencialidade
Veremos como os crackers querem atacar esses componentes para obter acesso a
o sistema. Como o principal objetivo de um hacker é explorar as vulnerabilidades do
sistema, ele quer ver se há alguma fraqueza nesses componentes principais.
Vamos supor que o hacker queira bloquear a disponibilidade dos dados. Naquilo
caso, ele usará o método “Negação de Ataque” ou 'DoS'. Para fazer esse ataque,
geralmente os hackers usam recursos ou largura de banda do sistema. Mas o DoS tem
muitas outras formas. Quando o recurso ou a largura de banda do seu sistema são
consumidos completamente, o servidor geralmente falha. O alvo final é um sistema, mas o
número de vítimas é abundante. É como se milhões de pessoas se reunissem na frente da
porta principal de sua casa e a prendessem com uma espécie de corrente humana para que
você e seus familiares não pudessem entrar por ela.
O segundo componente-chave A integridade não deve ser comprometida a qualquer
custo. O que significa este termo “integridade”? É basicamente centrado na natureza dos
dados. Quando essa natureza dos dados é adulterada por algum tipo de ataque 'BIT
FLIPPING', a integridade do sistema também é comprometida. Isso pode ser feito apenas
alterando a própria mensagem. Os dados podem estar em movimento ou em repouso, mas
podem ser alterados. Imagine o que acontece quando uma transação de dinheiro é adulterada
com a adição de mais alguns zeros no final! Vamos supor que um banco está transferindo
dinheiro. Em sua instrução está escrito: “transferir $ 10.000”. Agora, o invasor altera o texto
criptografado de maneira que o valor mude para $ 10.000.000. Portanto, o ataque é direcionado
à própria mensagem ou a uma série de mensagens.
Machine Translated by Google
Agradecimentos
KARTICK PAUL, GERENTE DE SISTEMA, AAJKAAL, KOLKATA, Sem sua ajuda
persistente e inspiradora, eu não poderia escrever este livro.
Machine Translated by Google
Conteúdo
Parte I
Resumo
Resumo
parte II
comentando
Atribuição de valores
Usando Números
Corda
O que é tipo e ID
Valores Lógicos
Tuplas e listas
Dicionário
Objeto
Enquanto Loops
Para Loops
Valores de retorno
Gerar funções
Listas de Argumentos
Argumentos nomeados
Machine Translated by Google
Polimorfismo
Usando Geradores
Herança
Decorador
Parte III
Wikipédia oculta
Índice
Machine Translated by Google
Resumo do conteúdo
Sobre o autor
Agradecimentos
Parte I
parte II
Parte III
Índice
Machine Translated by Google
Sobre o autor
Sanjib Sinha
Parte I
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_1
Sanjib Sinha 1
À medida que o tempo passa e progredimos, nosso antigo ambiente também está mudando muito
rapidamente. Não era como antes, quando mantemos registros inserindo dados em um grande
diário de bordo e os empilhamos um a um por data. Agora mantemos os dados em um computador.
Não vamos mais ao mercado para comprar nada. Encomendamos pela Internet e o pagamento é
feito com cartão de crédito ou débito. O crime também mudou de acordo. . A natureza de
Criminosos costumavam roubar seus dados fisicamente antes. Eles agora o pegam pela
Internet usando computadores. Agora, os computadores se tornaram uma nova ferramenta para os
negócios, bem como para os crimes tradicionais. Com base nisso, um termo —“cyberlaw”—vem à
tona. Como um hacker ético, a primeira e mais básica coisa que você deve lembrar é “não tente
penetrar ou adulterar qualquer outro sistema sem pedir permissão”.
Alguns exemplos podem lhe dar uma ideia de que tipo de crimes de computador são
puníveis em nosso sistema legal.
Machine Translated by Google
Se você usar qualquer ferramenta de software para gerar um número de cartão de crédito ou débito ,
então é uma ofensa altamente punível. Convidará a uma multa de cinquenta mil
dólares e quinze anos de prisão. Criar um site falso para obter números de cartão de
crédito com uma falsa promessa de vender produtos inexistentes é uma ofensa
altamente punível. Segue-se prisão rigorosa e multa pesada. Posso dar vários outros
exemplos que podem trazer problemas para você se não cumprir a lei.
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_2
2. Ambiente de Hacking
Sanjib Sinha 1
A primeira coisa que você precisa é de uma máquina virtual . Como eu disse antes, eu tenho
Ubuntu como meu sistema operacional padrão e dentro da minha máquina virtual eu instalei
dois sistemas operacionais - um é o Windows XP e o outro é o Kali Linux.
Tendo isso em mente, explico detalhadamente essa técnica de ser anônimo para que, antes
de pular para a grande tarefa, você torne sua defesa muito mais forte. Ser anônimo é a coisa
mais importante no mundo do hacking ético. Manter-se anônimo no Windows não é possível.
Portanto, é melhor se adaptar primeiro ao ambiente Linux. Outra coisa importante é que a maioria
das grandes ferramentas de hacking não está disponível no ambiente Windows. não se preocupe.
Você pode instalar o Ubuntu amigável dentro do sistema Windows ou pode facilmente particionar
Se você nunca ouviu falar de nenhuma distribuição Linux , seu disco em duas partes e
instalar o Ubuntu e o Windows
Machine Translated by Google
Para criar um ambiente de hacker ético ideal, alguns passos são extremamente
importantes. As etapas incluem: instalar a máquina virtual ou o Virtual Box (VB), ter um
conhecimento básico sobre redes e aprender uma linguagem de programação útil como o
Python. Vamos primeiro dar uma olhada no conhecimento básico de rede.
Machine Translated by Google
referência através da qual os dados serão comunicados. Terceiro, eles facilitam a engenharia
modular.
Existem dois tipos de modelos de interligação de redes: o .
modelo de referência OSI (Open Systems Interconnection) e o modelo TCP/IP
(Transmission Control Protocol/Internet Protocol). Ambos os modelos são amplamente
utilizados hoje.
O modelo de referência Open Systems Interconnection (OSI) foi desenvolvido pela Internet
Standards Organization (ISO) e possui sete camadas ao todo. As camadas são as seguintes:
aplicação (camada 7), apresentação (camada 6), sessão (camada 5), transporte (camada 4), rede
(camada 3), enlace de dados (camada 2) e física (camada 1).
Vamos muito brevemente tentar entender como esse modelo funciona. Suponha que um usuário
tenta abrir uma página da web. A primeira coisa que ele faz é enviar uma solicitação ao servidor
localizado a vários milhares de quilômetros de distância. Aqui, o disco rígido ou hardware do servidor
é a última camada (camada 1), denominada “física”. Assim, a requisição do usuário primeiro bate na
camada de “aplicação” (7) que é a mais próxima e depois segue em frente. Cada processo em cada
camada envolve um complicado funcionamento de “bits e bytes”. Um computador só entende 0 e 1.
Mas o usuário não gosta de ver um vídeo em 0 e 1.
Para ajudá-lo a manter sua sessão, as próximas três camadas funcionam muito bem.
duro. São eles: transporte (camada 4), rede (camada 3), enlace de dados (camada 2),
respectivamente. O nome do datagrama da camada de transporte é “segmento”. Por que isso é
chamado de “segmento”? É chamado de “segmento” porque divide sua solicitação em várias frações.
Primeiro, adiciona números de porta de origem e destino. Em seguida, tenta torná-lo confiável,
adicionando números de sequência. Assim, em poucas palavras, fornece controle de fluxo,
sequenciamento e confiabilidade.
O que acontece depois?
Machine Translated by Google
Agora podemos imaginar um pequeno escritório com um roteador, dois switches e alguns
desktops, laptops, impressoras e servidores. O roteador está conectado aos switches e os switches
estão conectados aos dispositivos como desktops, laptops, impressoras e servidores. Aqui desktops,
laptops, impressoras e servidores pertencem à camada 1 que é física. Os switches pertencem a
camada 2 que é enlace de dados, e o roteador cabe na camada 3 que é rede.
Resumo Vamos
recapitular rapidamente o que acabamos de aprender sobre as relações entre hacking ético e
internetworking.
2. Existem dois tipos de modelos de interligação de redes. Eles são referência OSI
Modelo e Modelo TCP/IP.
3. O Modelo OSI tem sete camadas. São eles: aplicação (camada 7),
apresentação (camada 6), sessão (camada 5), transporte (camada 4), rede (camada
3), enlace de dados (camada 2) e físico (camada 1).
4. O modelo TCP/IP tem quatro camadas. São eles: aplicação (camada 4),
transporte (camada 3), rede (camada 2) e rede (camada 1).
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_3
Sanjib Sinha 1
A primeira pergunta que vem à nossa mente é: por que precisamos de uma caixa virtual
quando temos um sistema operacional padrão instalado? Existem várias razões.
O motivo mais importante é: em uma caixa virtual podemos jogar com qualquer sistema
operacional sem medo de estragá-lo, até quebrá-lo. Existe toda a possibilidade de que, ao testar
uma ferramenta de hacking, possamos quebrar um sistema. Eu encorajo você a fazer isso. É
uma máquina virtual. Então, vá em frente. Teste tudo o que vier à sua mente. Outro grande
motivo para usar a caixa virtual é a segurança. Quando você visita um site. você pode considerá-
lo seguro, mas na realidade não pode ser assim. Mas nada importa no caso de uma caixa virtual.
Não é sua máquina original com dados confidenciais. Visitar um site inseguro não é mais irritante.
Apenas uma coisa que você precisa se lembrar. Fique dentro da lei. Ao testar suas
ferramentas de hacking ou códigos em execução,
sistema.
você não pode comprometer nenhum outro
O site oficial do Oracle Virtual Box oferece muitas opções de download.
Você pode escolher qualquer um deles. De acordo com o seu sistema operacional, vá
para a seção “download” e veja o que está disponível para você. A partir da próxima imagem,
você terá uma ideia de como prosseguir.
Machine Translated by Google
Figura 3-2. Uma imagem de terminal que informa sobre a arquitetura do sistema
Não está lá por padrão. Nesse caso, é extremamente fácil de instalar. Você pode
basta digitar “Caixa Virtual” na caixa de texto de pesquisa e ela aparecerá. Siga em
frente e pressione o botão de instalação.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_4
Sanjib Sinha 1
Uma vez instalado o Virtual Box em sua máquina, você não precisa se preocupar em instalar
vários sistemas operacionais nela. No início, estamos interessados em instalar o Kali Linux em
nosso Virtual Box. Acesse o site oficial do Kali Linux e baixe a imagem ISO da versão estável
mais recente.
Kali Linux é uma distribuição Linux muito maior do que outras distribuições Linux.
Deve ser em torno de 3 GB. O Ubuntu e outros têm cerca de 1 GB ou um pouco mais.
Agora que o processo de instalação terminou, você pode armazená-lo em seu disco
rígido local ou gravá-lo em um DVD. Agora abra sua Caixa Virtual e clique em “Novo”. Ele abrirá
automaticamente uma nova janela que perguntará que tipo de sistema operacional você vai
instalar. A imagem a seguir é bastante auto-explicativa.
Machine Translated by Google
Figura 4-2. O processo de instalação do Kali Linux no Virtual Box solicita o tamanho da memória
Você pode alocar o tamanho da memória de acordo com a capacidade de sua máquina. Mínimo
1 GB é bom. É melhor se você puder alocar mais. Na próxima etapa, ele solicitará capacidade de
armazenamento e algumas outras coisas essenciais.
Posso garantir que, como iniciante, você não encontrará nenhuma dificuldade em
instalando Kali Linux em sua Caixa Virtual. A parte mais importante deste processo de instalação
é que você precisa manter sua conexão com a Internet funcionando para que o Kali Linux ajuste
seus pré-requisitos online de acordo.
Normalmente, quando um sistema operacional é instalado em uma máquina virtual, ele vem
em um tamanho pequeno e fica assim. A próxima imagem mostrará o tamanho original.
Machine Translated by Google
Mas trabalhar com esse tamanho é realmente complicado. Para resolver esse problema,
normalmente é usado o Virtual Box Guest Addition. Mas antes disso, você pode querer atualizar
e atualizar seu Kali Linux recém-instalado. Essa é uma boa prática que ajuda você a estar sempre
atualizado. Depois de fazer login digitando nome de usuário e senha, você encontrará o terminal
no painel esquerdo. Abra-o e digite: apt-get update Você deve estar online para que ele seja
atualizado por conta própria. Pode demorar algum
Figura 4-4. Kali Linux executando Oracle VM Virtual Box com ferramenta de ataques de senha
Figura 4-5. Obtendo o tamanho de tela cheia do Kali Linux no Virtual Box
Leve o ponteiro do mouse para a parte central superior, onde você obterá o menu
“Dispositivos”. O último diz assim: “insira a imagem do CD da edição de convidado”.
Clique nele e ele cuidará de tudo automaticamente.
Normalmente deve funcionar bem. Se não, encare como um desafio. Procure na
internet. Há muitas mãos amigas esperando por você para ajudar no que você deseja obter.
Quando qualquer novo sistema operacional é instalado em sua máquina virtual, geralmente
é pequeno em tamanho. Mas existe uma técnica que o ajudará a obter a tela cheia original
Machine Translated by Google
efeito.
Para o Windows 7 Ultimate, há uma pasta Virtual Box Guest Addition disponível
na seção de armazenamento. A caixa de cor azul vem com uma etiqueta. Ele lê
. Basta
Virtual Box Guest Additions contém vários arquivos.
clicarVocê
nele. notará
Ele vaidois arquivos
se abrir. Será“.exe”
. Um éépara
o outro é para a arquitetura do sistema de 64 bits. Minha máquina 32bits,
de 64 bits então
e
eu clico e a executo. Os passos são muito simples. Ele vai pedir para ser instalado.
Clique em OK e prossiga. Isso fará com que o estado da máquina virtual do Windows 7
Ultimate fique cheio
tela.
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_5
Pode parecer repetitivo, mas eu gostaria que fosse cimentado em sua mente que
sem conhecer o Linux corretamente, você não pode se aprofundar no misterioso mundo do
hacking ético. Portanto, você deve conhecer os comandos básicos primeiro. Esses comandos
informarão sobre o próprio computador. Ele informará a localização do sistema de arquivos -
onde você está no seu computador. Por esses comandos, você pode alterar a permissão de um
sistema de arquivos, copiar ou remover permanentemente um arquivo. Você pode adicionar um
novo usuário ao seu sistema. Você pode ter uma lista de arquivos que estão atualmente no
diretório onde você está. Esta listagem inclui os arquivos ocultos. Resumindo, você pode pelo
menos fazer as operações básicas por meio do teclado sem usar o ponteiro do mouse. Isso é
ótimo do ponto de vista de um iniciante, presumo.
Para começar, vamos primeiro iniciar o Kali Linux. Na imagem a seguir, você verá uma
representação em tela cheia de Kali. Vou explicar algumas coisas primeiro, para que, como
iniciante, você aprenda o que precisa saber primeiro sobre Kali.
Machine Translated by Google
Figura 5-1. Visualização em tela cheia do Kali Linux com seu painel esquerdo
A imagem acima mostra a visualização em tela cheia do Kali Linux. No painel esquerdo,
na parte superior, está o navegador “Iceweasel”. Em seguida, segue a ferramenta de linha
de comando. Precisamos dessa ferramenta com bastante frequência nas próximas lições. A
ferramenta de linha de comando ou terminal basicamente lida com todos os tipos de entradas
de teclado. Os bons programadores dificilmente usam o ponteiro do mouse. Eles ficam mais
confortáveis com este terminal e digitação. O sistema de arquivos o segue. Se você clicar
nele, abrirá uma janela como qualquer versão do Windows NT. Você verá vários diretórios e
pastas como “Início”, “Downloads”, “Imagens”, etc.
Vamos começar com a ferramenta de comando abrindo-a. Você pode fazer parecer
maior. Basta usar as teclas “control” e “shift” com o sinal “+”.
Na imagem a seguir você verá alguns comandos iniciais que normalmente
digitamos para saber que tipo de arquivos temos em alguns diretórios ou pastas.
Machine Translated by Google
Deste lugar você pode adivinhar o que está acontecendo. Mudamos o diretório e
verificamos o que “sanjib” tem em seu diretório “Downloads”.
Em seguida, aprendemos sobre o comando “pwd” . Ele declara sua posição. Como root,
se você estiver no diretório “Home” e emitir um comando “pwd”, ele terá uma saída como esta:
Machine Translated by Google
Ele diz que você está no diretório “/home”. Este comando “pwd” é importante
quando você precisa controlar um sistema grande e complicado. Muitas vezes você
pode esquecer onde está trabalhando. Normalmente, se você quiser voltar ao diretório
anterior, precisará digitar isto:
Isso significa que você primeiro vai para o diretório “sanjib” e depois volta com um “cd”
comando com dois pontos.
Em seguida, aprendemos sobre o comando “cp” . Este comando significa cópia.
Você pode copiar um arquivo de um destino para outro. Vimos que em nosso diretório
“home” temos um arquivo, “[Link] .” Vamos copiar este arquivo para
o diretório “Documentos” do usuário “sanjib”.
root@kali:/home# cp -v [Link]
/home/sanjib/Documents/
'[Link]' ->
'/home/sanjib/Documents/[Link]'
root@kali:/home#
mover qualquer arquivo de uma pasta para outra pasta. Este comando é mais ou menos
como um comando “cp”. Mas há uma grande diferença. Este comando move
completamente o arquivo de um lugar para outro. Outro comando importante é “gato”.
Você pode ler qualquer arquivo de texto com a ajuda deste comando.
Eu tenho uma pasta chamada “Writing” e tenho alguns documentos lá. Agora
com a ajuda deste comando podemos ler qualquer arquivo de texto. Lembre-se que é
verdade apenas para um arquivo de texto. Para um experimento, eu queria ler um
arquivo com extensão “.odt” e a próxima imagem mostra como ficou no terminal.
Figura 5-3. Tentando ler um arquivo não texto com o comando “cat”
Nesta parte, quero mostrar outro truque que costuma ser usado no Linux.
Suponha que você queira escrever um arquivo de texto muito rapidamente. Você
pode usar "nano". Ele vem com todas as distribuições do Linux. Basta digitar “nano” no
seu terminal e ele abrirá um editor de texto no próprio terminal. A próxima imagem mostra
como isso acontece.
Machine Translated by Google
Figura 5-4. Nanoeditor de texto. Como salvar um arquivo e sair do editor está escrito nele.
Agora você pode ler com segurança este novo arquivo, “[Link]”, com o
comando “cat”. Tudo o que você precisa fazer é emitir um comando no seu terminal como este:
romance de [Link]
[Link]
Isso dirá ao “nano” para abrir o arquivo. O resto é o mesmo. Você pode editar qualquer
parte e, com as teclas “control” e “o”, você pode salvá-la novamente. Então você pode
sair do arquivo com “control” e “x”.
Na próxima imagem veremos como fica quando tentamos ler um arquivo por
usando o comando "gato".
Machine Translated by Google
hagudu@hagudu-H81M-S1: $ cd /etc/apt
hagudu@hagudu-H81M-S1:/etc/apt$ ls [Link].d
[Link]
[Link] confiá[Link].d [Link] t
preferências.d [Link].d
trustdb .gpg [Link] hagudu@hagudu-H81M-S1:/
etc/apt$ t
Como você pode ver, nós mudamos o diretório para “/etc/apt” e vemos o
listagem. Encontramos muitos arquivos lá e atualmente estamos interessados
no arquivo “[Link]”. Podemos usar o comando “cat” para ler o arquivo, mas
temos algo diferente em mente.
Gostaríamos de pesquisar alguma palavra em particular e queremos separá-las
e vê-los em segregação. O comando “grep” junto com outro
Machine Translated by Google
deb-src [Link]
trusty-updates principal restrito deb-src http://
[Link]/ubuntu/ universo confiável
deb-src [Link]
universo de atualizações confiáveis
deb-src [Link] trusty multiverse deb-src http://
[Link]/ubuntu/ trusty-updates multiverse deb-src http://
[Link] .[Link]/ubuntu/ trusty-backports principal universo restrito
multiverso deb-src [Link] trusty
Podemos até filtrar o arquivo de origem de forma mais distinta. Podemos restringir nosso
pesquise mais e diga ao terminal para encontrar a palavra “src” apenas com letras
minúsculas anotando este comando:
hagudu@hagudu-H81M-S1: $
Primeiro, ecoamos algum texto em nosso terminal e, em seguida, usamos “>” (sinal de
maior que) para colocar esse texto no arquivo “[Link]”. No próximo comando, usamos
novamente o comando “cat” para ler o arquivo “[Link]” e descobrimos que o arquivo foi
alterado.
Agora vamos aprender como criar diretórios no Linux. Há um muito útil
comando: “mkdir”. Significa claramente "criar diretório". Vamos criar um diretório
com o nome deste projeto: “Ethical Hacking”. Você pode imaginar que o comando é
extremamente simples: mkdir Ethical Hacking Não, não é. Nesse caso, se você escrever
dessa maneira, o terminal Linux entenderá
algo mais. Ele compreende que você deseja criar dois diretórios separados. Um
é “Ético” e o outro é “Hacking”. Ele já criou dois diretórios dessa forma. Portanto, vamos
removê-los primeiro e, a seguir, criaremos um diretório com um significado mais significativo.
Para remover um diretório, você deve ter o privilégio “root”. Significa que você é um
Machine Translated by Google
Funcionou - dois diretórios foram removidos com sucesso. Vamos tentar entendê-lo
mais. Já sabemos que o comando “rm” representa a palavra “remover”. Mas e o comando “-
rf” que o segue? O comando “-rf” significa “faça recursivamente com força”. Geralmente este
comando “-rf” é usado para remover diretórios. Você deve ter muito cuidado ao usar este
comando porque no Linux, depois de usar este comando, o arquivo ou diretório é excluído
permanentemente. É quase impossível recuperá-los. É sábio ter muito cuidado ao usá-lo.
Espero que você também tenha notado que iniciamos nossa linha de comando com
“sudo” sempre forneça
. E vocêaescreve
senha que vocêele
“sudo”, costuma
pede a digitar
[Link] fazer
Neste login
caso, no sistema.
você
“arquivo2”. Novamente, emitimos o comando “ls” para verificar se dois arquivos foram
criados com sucesso.
No Ethical Hacking, o anonimato é um grande negócio. No próximo capítulo,
aprenderemos isso em detalhes. Antes disso, você precisa entender que, no processo de
anonimato, é bom ser qualquer usuário e não o usuário root. Como root ou superusuário, você
primeiro adiciona um usuário em seu Kali Linux virtual. Defina uma senha. Desligue Kali. Reinicie
e faça login como o novo usuário. É uma boa prática.
Agora, como você poderia adicionar um usuário? Vamos abrir nosso Kali virtual e como raiz
user, usaríamos o comando “adduser” no terminal. Suponha que nosso novo usuário tenha um
nome como “xman”. Nesse caso, o comando será bem simples: adduser
Homem X.
Depois de emitir este comando, Kali solicita a senha e outros detalhes. Forneça uma senha
forte de pelo menos oito caracteres com caracteres alfanuméricos. Agora desligue sua máquina
e faça login como “xman”. Para outros detalhes, não é obrigatório que você forneça sua
identidade real. Você pode preenchê-los com quaisquer dados.
Como root ou superusuário, você pode adicionar quantos usuários desejar. Você pode
excluí-los a qualquer momento. Você pode restringir suas atividades de qualquer ângulo.
Como administrador, você pode adicionar um usuário que não poderá fazer login após seis
meses. Você pode criar grupos e definir uma regra para que a entrada seja restrita. Alguns
usuários podem entrar nesse grupo. Alguns não podem.
Primeiramente você precisa adicionar um usuário, “xman”, e logar no sistema como o
novo. Um usuário não tem permissão para acessar ou adulterar qualquer arquivo do root
ou superusuário. Mas como superusuário, você sempre pode alterar a permissão do arquivo. É
um conceito muito importante de todos os ângulos. Na Internet, o conceito de permissão de
arquivo é extremamente importante.
Qualquer arquivo tem três tipos de permissões relacionadas a ele. Pode ser apenas
"somente leitura". O significado é claro. Você não pode escrever nele ou executá-lo. Pode ser
"somente gravação". Outro estado do arquivo é “modo executável”. Se for executável, você pode
executar qualquer ação ao executá-lo. Você pode escrever um programa Python simples.
Este programa receberá entradas dos usuários e fornecerá saídas. Depois de escrever um
arquivo Python, você pode torná-lo executável.
Vejamos como isso acontece. Vamos abrir nosso terminal Kali Linux e, com o
ajuda do comando “ls” , vemos o que temos lá atualmente.
[Link]
sanjib@kali: /Documentos$
Ele nos diz que o dono deste arquivo é “root”. E a linha de partida também é muito
importante. Ele lida com permissões de arquivo.
r-xr-xr-x
O que isto significa? Tem três partes distintas. A primeira parte é “rx”. A segunda e
terceira partes também são as mesmas: “rx”. A primeira parte é para o proprietário do
arquivo ou usuário atual. A segunda parte é para “grupo”. E a parte final ou terceira é
para o superusuário que está visualizando este arquivo. Já criei outro usuário, “sanjib”,
e loguei como “sanjib”. É por isso que você vê este tipo de saída: sanjib@kali:ÿ/
Documents$ ls -la
Agora para deixar esse conceito mais claro vamos criar um usuário chamado “xman”.
E faremos login como “xman” e veremos o que temos em nossa pasta Documentos.
Para criar um novo usuário, você precisa fazer login como root ou superusuário.
Vamos supor que tenhamos logado como “root”. Os comandos e a saída são fornecidos
abaixo.
Vamos sair como “root” e entrar como “xman”. Vamos também para a pasta
“Documentos” do “xman” e ver o que temos.
Tudo corre como esperado. Só falta uma coisa. Este novo usuário
não tem esta linha: -r-xr-xr-x 1 root root 7208397 29 de maio 10:30
[Link].
Talvez tenhamos movido esse arquivo executável de qualquer pasta raiz
para a pasta “Documentos” do usuário “sanjib” antes.
Agora já sabemos como criar um arquivo usando o editor de texto “nano”. Assim, podemos
seguir em frente e ter um arquivo Python bem pequeno. Presumivelmente,
então mantenho
vocêtudo
nãomuito
conhece
simples
Python,
apenas para mostrar como podemos alterar as permissões de arquivo.
Machine Translated by Google
#!/usr/bin/python3 print("Digite
seu nome.") inputs = input(">>>>>>")
outputs = inputs def main(): print(outputs)
if __name__ == '__main__': principal()
Como você vê, o arquivo diz tudo. Ele diz que agora a pasta “Documentos” tem um
novo arquivo, “[Link]”, e foi criado às 10:44. O proprietário é “xman” e tem permissões
de arquivo como esta: rw-r--r-- Agora você sabe o que isso significa. Significa: o usuário
“xman” pode ler e escrever este arquivo, mas não pode “executar” este arquivo.
entre eles. A primeira parte da permissão diz que “x” foi adicionado desde que usamos o
comando “xman@kali:ÿ/Documents$ chmod +x [Link]” .
Vamos executar o arquivo e ver como ele pega a entrada e dá a saída.
>>>>>>xman
Homem X
Quando você executa o arquivo, ele pede para digitar seu nome e devolve gentilmente
a saída.
Resumo Você
aprendeu alguns comandos básicos do Linux neste capítulo. Agora pelo menos você tem uma
ideia de como um sistema Linux está funcionando e como você pode usar seu terminal ou
linha de comando para operar seu sistema.
No processo de aprendizagem do hacking ético, você o considera extremamente útil.
No futuro, você precisará aprender mais alguns comandos do Linux. Seu conhecimento de
Linux ou qualquer outro sistema operacional deve ser louvável. À medida que você progride,
espero, seu “apetite vem com a alimentação”.
Discutimos rudimentos suficientes para pisar no chão do hacking ético. Agora é hora
de seguir em frente. Estamos prontos para dar o primeiro passo importante no mundo do
hacking ético aprendendo uma linguagem de programação muito útil: Python 3.
parte II
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_6
Sanjib Sinha 1
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_7
7. Ambiente Python
Sanjib Sinha 1
Você vai aprender Python 3. Python 2 já existe há muito tempo e tem uma enorme biblioteca e
suporte a módulos, mas Python 3 é a linguagem do futuro.
Você também pode instalar facilmente o Python 3. Consulte a seção de download do site
oficial. Em qualquer distribuição Linux moderna, abra seu terminal
fornecerá
e digiteo “python3”.
interpretador
Ele
Python ou shell onde você pode escrever seu código.
Lembre-se, o Python vem com todas as distribuições modernas do Linux. Então você não
precisa mais instalá-lo. Mas alguns pacotes que você pode precisar instalar. Existem muitos
tutoriais e muita ajuda da comunidade que você pode obter pela Internet.
O interpretador Python em uma distribuição Linux típica se parece com isto:
Machine Translated by Google
Em qualquer distribuição Linux moderna, você não precisa fazer nada. Abra o
terminal e digite “python3”, e você terá uma saída como esta:
Ele diz que meu computador tem Python 3.4.3. Agora você pode escrever algum
código diretamente nele para obter uma saída como esta:
<código>
Machine Translated by Google
Se você é novo no Linux, primeiro salve este arquivo Python como “[Link]” e
depois mude-o para executável com este comando:
./olá.py
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_8
8. Sintaxes Gerais
Sanjib Sinha 1
Neste capítulo aprenderemos algo apenas para experimentar alguns códigos. Aprenderemos as
mesmas coisas em detalhes mais tarde. Tudo o que precisamos fazer agora é tentar escrever
algum código em Python e ver como funciona. Ao mesmo tempo, aprenderemos sobre as sintaxes
gerais usadas frequentemente em Python.
<código>
Salve este arquivo como “[Link]”. Quando você executar este arquivo, ele dirá
ou imprimirá: “Eu sou um arquivo Python de sintaxe geral”.
Machine Translated by Google
<código>
#!/ usr/ bin/ python3 def
main():
print("Eu sou um arquivo Python de sintaxe geral")
Deixe-nosFazerAlgo()
def LetUsDoSomething():
print("Estou fazendo algo")
Suponha que você não tenha nenhuma função main(). Agora, se você quiser
chamar a função LetUsDoSomething() antes dessa função ser definida, ela dará
um erro.
Tente este código e veja o erro:
<código>
envolvidos, nem sempre é possível mantê-lo. Para resolver esse problema, é uma boa
prática definir primeiro a função main(). Depois disso, você pode escrever qualquer
função após a função main() e chamá-la dentro de main().
<código>
# codificação=utf-8
def main():
print('Uma linha dentro da função principal.')
print("Uma linha fora da função principal.") if __name__
== main():main() </code>
Olhe para este código. A função print() dentro da função main() foi recuada. Tem
cerca de quatro espaços. E a segunda função print() está fora da função main(). E veja o
código; ele cai na mesma linha com a função main(). Portanto, quando executamos este
programa, a função externa print() é executada primeiro. E a saída é assim:
//saída Uma
linha fora da função principal.
Uma linha dentro da função principal. //
saída finalizada
Se tentarmos empurrar a função print() de fora um pouco para dentro, isso dará um
erro, porque o interpretador Python pensará que está dentro da função main().
Na verdade, isso não é verdade. Se quisermos enviar essa “função externa print()
” para dentro da função main(), função
precisamos
print()colocá-lo
assim: na mesma linha do interior
<código>
# codificação=utf-8
def main():
print('Uma linha dentro da função principal.')
Machine Translated by Google
//saída Uma
linha dentro da função principal.
Uma linha fora da função principal. //saída
finalizada
Aprendemos uma lição muito importante que devemos aprender de cor. A lição
é: espaço em branco ou recuo em Python desempenha um papel importante. Quando
escrevemos uma função e colocamos algumas outras funções dentro dela, elas devem cair na mesma linha.
Em qualquer editor de texto ou IDE, isso é feito automaticamente. Quando você pressiona
a tecla “enter” ou “return”, as linhas seguintes continuam caindo na mesma linha. Se você
quiser sair dessa função, basta seguir o primeiro exemplo. Apenas para entender como a
indentação funciona em Python, escrevemos um código um pouco extenso e vemos como
fica.
<código>
# codificação=utf-8
def main():
# print('Uma linha dentro da função principal.') # #
print("Uma linha fora da função principal.")
OutsideMainFunction() def
OutsideMainFunction(): x = 0 while x
< 5: print(x) x = x + 1
loop” também tem seu próprio recuo. Na verdade, é melhor chamá-lo de "bloqueio".
Portanto, cada bloco de código tem seu próprio “espaço em branco” ou o código dentro
desse bloco é recuado de acordo. Se você não usa nenhum IDE e tenta escrevê-lo em
seu terminal, deve usar a barra de espaço. Dentro de uma função, se você usar “quatro
espaços”, então o que quer que você escreva dentro dessa função deve cair na mesma
linha. Ou seja, sempre que você escreve uma nova linha, ela deve ter “quatro espaços”.
Você não pode dar dois ou três espaços de repente. Mas se você escrever outra função,
poderá alterar essa regra. Nesse caso, a nova função tem seu próprio bloco de código e
sua própria regra. Você pode usar dois espaços agora.
Comentar Em
qualquer tipo de programação, comentar é muito importante. Outro
programador lerá seu programa. Cada passo seu deve ser legível. Se houver algum
tipo de reviravolta ou você tentar algo especial, você deve explicar isso dentro do seu
código. Considere este código:
<código>
# esta é a função main() def main():
OutsideMainFunction()
# esta função está fora de main() function def
OutsideMainFunction(): x = 0 while x < 5: print(x) x = x + 1
Atribuindo valores Em
Python, o operador de atribuição é um sinal de igual (=). Quando você escreve “a =
10”, significa que “a” é uma variável ou um contêiner. Esta variável “a” é atribuída a
um valor inteiro. Qual é esse valor? É 10. Esse valor poderia ser uma string. O que é
uma corda? Uma string é uma adição de caracteres. Suponha que você escreva “b =
Dois”. Significa que a variável “b” é atribuída a um valor de string, e essa string é “Dois”,
que nada mais é do que três caracteres: “T”+“w”+“o”.
De acordo com sua atribuição, o Python interpreta o valor e mantém um local de
armazenamento definido para eles. Ele sabe quantos bits e bytes serão necessários
para eles.
Em Python, tudo é objeto. Python é uma programação orientada a objetos
linguagem. Como iniciante, você pode não entender esse conceito. Não se preocupe.
Discutiremos isso em detalhes à medida que progredirmos. Você aprenderá. Atualmente
você apenas lembra que um objeto significa uma instância de classe. Imagine-se como
um objeto. Nesse caso, você é uma instância da classe “humana”. Você tem algumas
propriedades como altura, largura, etc. Você também pode fazer algo. A classe “humana”
é um projeto de você e de outros humanos e na classe “humana”, tudo foi bem definido.
Existem muitas propriedades e muitos verbos de ação definidos. E de acordo com essa
definição, você, eu e outros humanos continuamos fazendo coisas.
Quando dizemos em Python que tudo é um objeto, significa que tudo tem uma classe
ou projeto por trás. Escrevemos assim:
<code>
#!/ usr/ bin/ python3 #
coding=utf-8 a = 1 print(a)
print(type(a)) print(id(a)) a
= "One" print(a) print(type
(a)) print(id(a)) </código>
Machine Translated by Google
E a saída é assim:
// saída 1
<class 'int'>
139113568
One
<class 'str'>
3073583584 //
saída finalizada
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_9
3. Tipo identifica uma classe de um objeto. Não pode mudar para a vida de
objeto.
5. Cada variável em Python é um objeto de primeira classe. O que parece uma variável
simples na verdade é algo mais complexo.
Vejamos o que significam esses termos.
<código>
#!/ usr/ bin/ python3 def main():
x=1
Machine Translated by Google
print(x)
print(id(x))
print(type(x)) x = 2
print(x) print(id(x))
print(type(x)) x = 1
print(x) print(id( x))
print(tipo(x))
<blockquote> 1
10455040 classe
'int' 2 10455072
classe 'int' 1
10455040 classe
'int' </blockquote>
Como você pode ver, alterar os valores de “x” não afeta os objetos imutáveis
e o identificador exclusivo do objeto “1” permanece o mesmo. O que foi alterado é
simplesmente a referência da variável. Primeiro, referimos “1” (objeto inteiro
imutável) a “x” (variável) e depois o alteramos. O ID e o tipo permanecem os mesmos.
Lembre-se, números, strings e “tuplas” são imutáveis. Listas,
dicionários e outros objetos são mutáveis (alteráveis), mas dependem.
Vejamos um exemplo muito breve onde é explicado na seção de
comentários. A saída é dada junto com ele.
Machine Translated by Google
<code>
#!/ usr/ bin/ python3 # em
python tudo é objeto # uma variável é uma
referência a um objeto # cada objeto tem uma identidade
ou um ID x = 1 print(type(x)) print(id(x) ))
################# # classe 'int' # 139113568
################## # número, string, tupla -> imutável
# lista, dicionário -> mutável x = 1 y = 1 print(type(x))
print(id(x)) print(type(y)) print(id(y)) if x == y :
print("Verdadeiro")
outro:
print("False") se x
for y: print("True")
senão:
print("False")
################## #
veja as duas últimas linhas, ambas são verdadeiras #
class 'int' # 139113568 # class 'int' # 139113568
# Verdadeiro
#
Verdadeiro
################## a = dict(x = 1, y = 1)
Machine Translated by Google
print(type(a))
print(id(a)) b =
dict(x = 1, y = 1) print(id(b)) if a
== b: print("True") else:
print("False") se a
for b: print("True") senão:
print("False")
################## #
veja as duas últimas linhas, uma é verdadeira, mas o id não é o
mesmo, então é falso
# classe 'dict' #
3072650252 #
3072692524
# Verdadeiro
# False
################## para
i in range(0, 3):
print(i, "=", id(i))
################## # 0 =
139113552 # 1 = 139113568 # 2 =
139113584 ####### ###########
< / código>
Usando Números
Machine Translated by Google
<código>
#!/ usr/ bin/ python3 def
main(): x = 3
print(x)
print(id(x))
print(type(x))
print("*********") x = 3 /2
print(x) print(id(x))
print( type(x))
print("*********") x =
round(42 / 9) print(x)
print(id(x)) print(type(x))
print("** *******") #
queremos arredondar
para cima x = 42 // 9
print(x) print(id(x))
print(type(x)) print("********
**") # quantos dígitos queremos
arredondar para x = round(42 / 9,
3) print(x) print(id(x)) print(type(x))
print("****** ***") x = 43% 7 print(x)
Machine Translated by Google
print(id(x))
print(type(x))
print("*********") x =
int(34.78) print(x)
print(id(x)) print(type(x) ))
print("*********") x =
float(23) print(x)
print(id(x)) print(type(x))
print("******** **") if
__name__ == "__main__":
main() </code>
<blockquote> 3
10455104
classe 'int'
*********
1.5
140223146811728
classe 'flutuar'
*********
4 10455136
classe 'int'
*********
5 140223146823568
classe 'int'
*********
4.667
140223146811968
Machine Translated by Google
classe 'flutuar'
*********
1 10455040
classe 'int'
*********
34
10456096
classe 'int'
*********
23.0
140223146811968
classe 'flutuar'
*********
</blockquote>
Como você vê na saída, cada número tem uma classe e um ID. Para números,
esse ID é imutável. Portanto, se você atribuir o mesmo número (suponha que seja
1) a duas variáveis diferentes, assim: a = 1 e b = 1; o ID de “a” e “b” é o mesmo.
String
Em Python, string é um objeto imutável e pode ser escrito entre aspas
duplas ou simples. Considere este código:
<código>
#!/ usr/ bin/ python3 def
main():
strings = "Eu te amo." print(strings)
anotherStrings = "Eu te amo
mas\nnão sei
quanto você me ama."
print(anotherStrings) if
__name__ == "__main__": main() </
code>
<blockquote> Eu
te amo.
Eu te amo, mas
não sei o quanto você me ama. </blockquote>
Como você vê, usamos uma barra invertida para obter uma nova linha. E nós temos um exato
quebrar onde precisávamos.
Há também uma saída de string bruta. Veja este código:
<código>
#!/ usr/ bin/ python3 def
main():
strings = "Eu te amo." print(strings)
anotherStrings = "Eu te amo
mas\nnão sei
quanto você me ama."
print(anotherStrings) rawStrings
= r"Eu te amo, mas\nnão sei o quanto você me ama."
print(rawStrings) if
__name__ == "__main__": main() </
code>
<blockquote> Eu
te amo.
Eu te amo, mas
não sei o quanto você me ama.
Eu te amo, mas\nnão sei o quanto você me ama. </blockquote>
A última instrução é chamada de string bruta, onde uma barra invertida não está mais
funcionando e obtemos uma saída bruta. E é usado em expressão regular. Discutiremos
isso em detalhes em nosso capítulo sobre expressões regulares.
Podemos inserir um inteiro no meio de uma string. Eu mostro a você os dois
métodos usados em Python 2 e Python 3, mas lembre-se, é melhor você se ater ao
Machine Translated by Google
<código>
dias = 8
letras = "%s dias por semana não são suficientes para te amar." %days
print(letras) </code>
A saída é assim:
<blockquote> 8 dias
por semana não são suficientes para te amar. </blockquote>
<code>
days = 8
lyrics = "{} dias por semana não são suficientes para te amar."
print([Link](dias)) </code>
A saída:
<blockquote> 8 dias
por semana não são suficientes para te amar. </blockquote>
Qual é a principal diferença entre essas duas construções? A diferença está na versão
mais recente do Python; tratamos string como um objeto. Portanto, um objeto “letras” usou
um método chamado format() e passou um parâmetro que deseja formatar nele. Na linha
print([Link](days)) usamos um ponto (“.”), para chamar o método format() que está
embutido na classe string.
Em sua vida de codificação, você precisa usar muitas strings e algumas delas. Você
pode ter várias quebras de linha . não pode usar a barra invertida “n” todas as vezes. Isso é
incômodas.
Existe um truque que você pode usar em Python para usar várias novas linhas.
Machine Translated by Google
<code>
newLines = """\
primeira linha
segunda linha terceira
linha
mais por vir...
"""
print(novaslinhas) </
code>
<blockquote>
primeira linha
segunda linha
terceira linha
mais por vir... </
blockquote>
Agora você pode usar aspas simples em vez de aspas duplas. Você não pode
usar barra invertida no início, mas isso irá gerar um espaço no início da linha.
<código>
>>> x = 10
>>> x
10 >>>
type(x) <class
'int'> >>> id(x)
10455328
Machine Translated by Google
>>> y = 10
>>> e
10
>>> tipo(s)
<class 'int'>
>>> id(y)
10455328
>>> a = dict(nome='sanjib')
>>> um
{'nome': 'sanjib'}
>>> tipo(a)
<class 'dict'>
>>> id(a)
139984318683592
>>> b = dict(nome='sanjib')
>>> b
{'nome': 'sanjib'}
>>> tipo(b)
<class 'dict'>
>>> id(b)
139984318683720
Machine Translated by Google
>>> a == b
Verdadeiro
>>> a é b
Falso
>>>
</código>
Aqui primeiro atribuímos um valor inteiro “10” à variável “x” e depois atribuímos
o mesmo valor a “y”. Posteriormente, verificamos o ID de duas variáveis e descobrimos
que o ID é o mesmo. Dissemos isso na seção anterior. Agora você vê a saída.
<código>
>>> x == y
Verdadeiro
>>> x é y
Verdadeiro
>>>
</código>
Aqui fica evidente que ambas as variáveis “x” e “y” apontam para o mesmo objeto
inteiro, “10”. Portanto, o valor é o mesmo e as variáveis também são as mesmas. Mas isso
não aconteceu no caso de um objeto de dicionário que escrevemos logo depois disso.
Os dicionários “a” e “b” possuem o mesmo valor, mas como os objetos do dicionário
são mutáveis, ele altera o ID.
<código>
>>> a = dict(nome='sanjib')
>>> um
Machine Translated by Google
{'nome': 'sanjib'}
>>> tipo(a)
<class 'dict'>
>>> id(a)
139984318683592
>>> b = dict(nome='sanjib')
>>> b
{'nome': 'sanjib'}
>>> tipo(b)
<class 'dict'>
>>> id(b)
139984318683720
>>> a == b
Verdadeiro
>>> a é b
Falso
>>>
<código>
Ele diz que o ID do dicionário muda, embora duas variáveis tenham os mesmos valores.
Quando verificamos logicamente, diz, sim, o valor de duas variáveis é o mesmo,
mas como o ID é diferente, são objetos diferentes.
Como iniciante, você pode achar esse conceito um pouco estranho. Mais tarde,
porém, à medida que você progredir, descobrirá que esse conceito é extremamente útil.
Se dois dicionário
Um objeto de dicionário precisa ser alterado para fins de programação.
Machine Translated by Google
Valores Lógicos
Vamos considerar outro shell script para testar valores lógicos: True e False.
<código>
>>> a, b = 0, 1
>>> a == b
Falso
>>> a < b
Verdadeiro
>>> a > b
Falso
>>> a = Verdadeiro
>>> um
Verdadeiro
>>> tipo(a)
<class 'bool'>
>>> id(a)
10348608
>>> b = Verdadeiro
>>> b
Verdadeiro
Machine Translated by Google
>>> tipo(b)
<class 'bool'>
>>> id(b)
10348608
>>>
</código>
Aqui vemos que existem classes “bool” e o operador “==” representa o teste de
qualidade entre dois valores. Como “a” tem valor 0 e “b” tem valor 1, a saída é “False”. “A”
é menor que “b”? Sim. Assim, a saída sai como "True".
Tuplas e Listas.
Python tem muitos tipos sequenciais (listas de coisas). Consideremos este código:
<código>
x = (1, 2, 3, 4) print(x)
print(type(x)) </code>
<blockquote> (1, 2,
3, 4) classe 'tupla'
</blockquote>
Então é da classe “tupla” e tem uma lista de coisas. Lembre-se, a tupla é imutável.
Você não pode inseri-lo ou atualizá-lo. Mas você pode iterar assim:
Machine Translated by Google
<código>
para i em x:
print(i) </
code>
<código>
a = [1, 2, 3, 4]
imprimir(a)
imprimir(tipo(a)) </
código>
<blockquote> [1,
2, 3, 4] classe
'lista' </blockquote>
<code>
#!/ usr/ bin/ python3 #
tupla x = (1, 2, 3, 4)
# lista a
= [1, 2, 3, 4]
imprimir(a)
E a saída é assim:
<blockquote> [1,
2, 3, 4, (1, 2, 3, 4)] # após anexar [(1, 2, 3, 4), 1, 2, 3, 4, (1, 2, 3 ,
4)] # depois de inserir
Em Python, uma string também é um tipo sequencial e você pode iterar por meio dela.
Considere este código:
<código>
<blockquote>
oi
s
Machine Translated by Google
eu
s
t
r
eu
n
g
.
</blockquote>
<código>
strings = "string."
print(strings[1:3]) </code>
0=s1
=t2=
r3=i
4=n
5=g
<blockquote> tr </
blockquote>
Dicionário
Machine Translated by Google
Python tem outro tipo de valor agregado muito forte: dicionário. É uma aula, como
sempre. É mais como matriz associativa ou hash em outras linguagens.
Considere este código:
<code>
#!usr/ bin/ python3
EnglishDictionaries = {'bare':'jejune',
'anger':'dudgeon', 'abuse':'vituperate', 'howl':'ululate'}
print(EnglishDictionaries) # obtendo uma forma não
mais legível por humanos para chaves em
EnglishDictionaries:
E a saída é:
<blockquote>
{'abuse': 'vituperate', 'bare': 'jejune', 'howl': 'ululate', 'ranger':
'dudgeon'} abuso = vituperate nua = jejune howl = ululate raiva = dudgeon
< / citação em bloco>
<código>
PortugueseDictionaries = {'bare':'jejune',
'ranger':'dudgeon', 'abuse':'vituperate', 'howl':'ululate'}
<blockquote>
Machine Translated by Google
<código>
Object
Python é uma linguagem orientada a objetos. Vamos discuti-lo mais tarde em detalhes.
Digamos que existe uma classe ou blueprint e dessa classe ou blueprint podemos obter vários
tipos de objetos. Faça a aula de humanos. É realmente uma classe muito complexa! Tem
muitos tipos de propriedades; muitos tipos de ações são executadas por esta classe. Quando
criamos um objeto ou instância dessa classe, esse objeto ou instância pode levar adiante todas
as características dessa classe. Lembre-se, sempre houve um ser humano bom e um ser
humano mau.
Vamos supor que uma classe Humano tenha dois tipos de humanos: um é bom e o
outro é ruim. Na realidade, não é tão simples. Mas para começar nosso aprendizado, partimos
de um cenário menos complexo.
Considere o código abaixo:
<code> #!/
usr/ bin/ python3 class Humano:
def whatKind(self):
retornar [Link]
def main():
GoodHuman = Human()
print([Link]())
BadHuman = Human("Bad")
print([Link]())
if __name__ == "__main__": main() </code>
<blockquote>
Bom
Ruim
</blockquote>
<código>
classe Humano:
def whatKind(self):
return [Link] </code>
<código>
def whatKind(self):
retornar [Link]
</código>
Machine Translated by Google
<código>
def main():
GoodHuman = Human()
print([Link]())
BadHuman = Human("Bad")
print([Link]())
if __name__ == "__main__": main() </
code>
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_10
10. Condicionais
Sanjib Sinha 1
<code>
def conditionals_exec(): a, b = 1, 3 if a
< b: print("a é menor que b")
elif a > b:
print("a é maior que b") else:
</código>
A saída é:
######################### # a é
menor que b ###################
######
Machine Translated by Google
<código>
def valores_condicionais(): a, b = 1, 2
declarações = "menor que" se a
< b senão " não
menor que."
print(statements)
conditional_values() </code>
Essas funções podem ser escritas de forma mais conveniente e organizada com
as funções main() agora:
<código>
def principal():
print("Esta é a função principal.")
conditionals_exec() conditional_values()
def conditionals_exec(): a, b = 1, 3 se
a < b:
def valores_condicionais(): a, b = 1, 2
declarações = "menor que" se a
< b senão " não
menor que."
print(declarações)
</ código>
######################### # Esta é a
função principal. # menor que # a é menor
que b #########################
######################### # Esta é a
função principal. # a é menor que b # menor
que #########################
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_11
11. Voltas
Sanjib Sinha 1
“While loop” é a forma mais simples de loop em Python. Mas você precisa entendê-
lo corretamente. Caso contrário, pode acabar consumindo sua memória executando o
loop infinito. Normalmente, a maioria dos trabalhos é feita por “loop for”. Mas em alguns casos
especiais, você precisa usar “while loop”. Um entendimento básico é importante.
Loops while Em
inglês simples, costumamos dizer: “Embora seja verdade, ele continua em execução. Enquanto
não é verdade, para”. Logicamente, a mesma coisa acontece aqui. Enquanto uma afirmação é
verdadeira, o processo continua. Você precisa de um mecanismo para interromper esse
processo. Aquilo é importante. Caso contrário, essa declaração consumirá sua memória.
Considere este código:
<código>
b=1
while b < 50: print(b)
b = b + 1 </
code>
O que isso significa? Isso significa que a afirmação “b < 50” é verdadeira até que o conjunto
ou bloco de código seja verdadeiro dentro dela. Dentro do bloco escrevemos “b = b + 1” e antes
do início do loop while definimos o valor de b como 1.
Assim, em cada etapa, b progride adicionando 1 ao seu valor e termina em 49. Em
Machine Translated by Google
<código>
<blockquote> 1 1 2
3 5 8 13 21 34 </blockquote>
Para os iniciantes, vamos escrever este código de uma forma mais legível e ele irá
dar uma saída completamente diferente:
<code>
#!/ usr/ bin/ python3 a, b = 0,
1 while b < 30: print(b, end='
') a = b
b = a + b </
código>
<blockquote> 1
2 4 8 16 </
blockquote>
<code>
#!/ usr/ bin/ python3 #
série simples de fibonacci # soma
de dois números define o próximo conjunto a, b = 0, 1
while b < 30:
E a saída será:
<blockquote> a = 0
eb=1 , a=1eb=1 , a=1e
b=2=5 , a=2eb=3 , a=3eb=5 , a
e b = 8 = 21 , a = 8 e b = 13 , a = 13 e b
,
*********** Linhas de separação *********** a = 0 e b = 1 a = 1 e b = 2 a
= 2 e a = 8 e b = 16 , ,
b = 4 a = 4 e, b = 8 </blockquote> , ,
For Loops O
loop mais comum usado em Python é o loop for. Na verdade, quase todos os
tipos de tarefas de loop podem ser executados por meio do loop “for”.
Há uma razão, é claro. Com a ajuda do loop for, podemos iterar pelos
objetos Python e podemos iterar pela maioria dos objetos Python.
Vejamos um exemplo:
<code>
#!/ usr/ bin/ python3 song
= open('[Link]') para linhas em
[Link](): print(lines, end='') </
code>
<blockquote>
Yo, garota, você me tocou forte, sua
solidão me fez chorar
eu sou um nerd muito burro
Eu pensei sobre as palavras, eu não poderia manter
Então eu choro
Um nerd estúpido
</blockquote>
<code>
# enumerar
músicas = open('[Link]') for index,
lines in enumerate([Link]()): print(index, lines, end='') </
cede>
E a saída é assim:
Machine Translated by Google
<blockquote>
0 Yo, garota você me tocou forte 1 sua
solidão me fez chorar
2 eu sou um nerd tão estúpido
3 Pensei nas palavras, não consegui manter
4 Então eu choro
5 Um nerd estúpido
</blockquote>
<código>
se s == 's':
print("Olá, sou 's' e estou localizado na posição
{}".format(index)) </code>
<blockquote>
Olá, sou 's' e estou localizado na posição 3
Olá, sou 's' e estou localizado na posição 6
Olá, sou 's' e estou localizado na posição 10 </blockquote>
Isso é extremamente útil. Você pode pesquisar qualquer caractere dentro de qualquer string. Em
Python, funções ou sub-rotinas são extremamente importantes para a reutilização
de códigos. Podemos chamar uma função várias vezes e passar muitos
argumentos ou parâmetros para obter diferentes efeitos. Agora vamos passar um
. Considere este código abaixo:
parâmetro dentro da função loops()
<código>
#!/ usr/ bin/ python3
Machine Translated by Google
def main():
loops(0)
loops()
loops(3)
<blockquote> 0 1
2
3
4
5
*************
4
5
*************
3
4
5
*************
</blockquote>
Machine Translated by Google
Agora é óbvio que você pode brincar com esse código. Você pode passar dois
argumentos dentro da função loops() e controlam a função range() para obter
valores diferentes.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_12
Sanjib Sinha 1
<código>
DEmarcationLine()
MatchAndReplaceWord()
def DEmarcationLine():
imprimir("*************")
Antes de termos a saída, vamos ver o que está escrito dentro do arquivo. O
“[Link]” na pasta “principal” tem estas linhas:
<blockquote>
primeira linha lenore são
nove, segunda linha e jantar terceira linha e
nunca mais acabou e quarta
Como você vê, essas frases não são muito significativas. Nossa principal
preocupação é muito simples. Escrevemos algumas linhas sem sentido e depois
tentamos trabalhar com o uso do módulo “re”. Agora executamos o código e aqui está a saída:
<blockquote>
primeira linha #####e
são nove, segunda linha e dine terceira linha e
nunca##### mais e quarta quinta linha de
pinho #####e e o tremor aqui é ##### linha e
uma nova linha
eu te amo
onde você está ficando agora? não
sei *************
primeira linha #####
terceira linha e ##### sobre a quinta
linha ##### </blockquote>
1. Precisamos abrir um arquivo e colocá-lo no “bloco try” para evitar qualquer mensagem
de erro desagradável. Os iniciantes podem achar esse “bloqueio de tentativas”
bastante intimidador. Eu não expliquei isso antes e de repente comecei a usá-lo. Eu
fiz isso intencionalmente. Isso é explicado no próximo capítulo, “Exceções, captura de
erros”. Mas antes disso, quero que você os escreva e se habitue a um conceito que
parece complexo. Depois de aprender esse "bloqueio de tentativa", revise esse código
novamente. Você vai achar extremamente fácil!
Além disso, à medida que avança, você descobrirá que usar o “try block” é sempre um
bom hábito.
2. Obter o padrão das palavras que queremos pesquisar e, usando sinalizadores, podemos
ignorar caso.
3. Use o método de pesquisa do módulo "re" para ver se esse padrão corresponde ao nosso
linha.
<code>
#!/ usr/ bin/ python3 import re
def principal():
CompilerAndReplaceWord()
linha
Machine Translated by Google
<blockquote>
primeira linha ######
terceira linha e ###### sobre a quinta
linha de pinho ###### não sei ###### </
blockquote>
<code>
#!/ usr/ bin/ python3 import
re def main(): FindWord()
DEmarcationLine()
MatchWord() def
FindWord():
Machine Translated by Google
try:
files = open("../primary/[Link]") for line in files: #
você pode pesquisar qualquer palavra if
[Link]('lenor|more', line): print(line, end='
' ) exceto FileNotFoundError como e:
print([Link]()) exceto
FileNotFoundError como e:
print("O campo não foi encontrado:", e) def
DEmarcationLine():
print("*************") if __name__
== "__main__": main() </code>
Aqui procuramos um arquivo chamado “[Link]” que contém palavras como “lenor” ou “mais”
e isso também corresponde a algumas palavras que terminam com “ore”. Definimos duas
funções para pesquisar isso e usamos o módulo “re” Vamos. primeiro ver qual é o conteúdo
dentro do “[Link]”. Existem algumas palavras e linhas enganosas apenas para
testar nossa pesquisa.
<blockquote>
primeira linha lenore são
nove, segunda linha e jantar terceira linha e
nunca mais acabou e quarta
e o tremor aqui é
mais linha e uma nova
linha eu te amo onde
você está ficando
agora? eu não sei </blockquote>
<blockquote>
primeira linha lenore
terceira linha e nunca mais acabou
quinta linha do pinheiro lenore
*************
lenore
nunca mais
lenore </
blockquote>
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_13
Espero que você já tenha escrito muitos códigos. Se você realmente tivesse feito
isso, teria encontrado um ou dois erros. Existem dois tipos distinguíveis de erros. O
primeiro é “SyntaxError”. Isso significa que você tem um erro na sua sintaxe.
Considere este código:
<código>
Como você vê, eu esqueci de usar “:” no loop for. É um erro de sintaxe.
Outro erro é "Exceções". Isso significa que você escreve um código perfeitamente.
Não há erros sintáticos. Mas você se esquece de definir uma variável. Vamos considerar
estas linhas de código:
<código>
>>> 10 * x
Traceback (última chamada mais recente):
Arquivo "<pyshell#1>", linha 1, em <module>
10 * x
NameError: nome 'x' não está definido >>> 10 / 0
>>>
</código>
Como você pode ver, existem muitos tipos diferentes de erros. E na última linha nós
saíram do erro e obtiveram uma saída perfeita. No último erro, obtemos um “TypeError”.
Tentamos subtrair um inteiro de um objeto string. Na última etapa, convertemos esse
inteiro de entrada de string e a subtração ocorreu sem problemas.
É sempre bom detectar esses erros e obter uma boa saída. A frase “try block” já foi
usada antes. Agora chega a hora de aprendermos como usar esses blocos para detectar
erros. Anote o código abaixo em seu editor de texto e salve-o como “[Link]”.
<código>
Machine Translated by Google
DemarcationLine()
LineStrip()
DemarcationLine()
CheckFileExtension()
def ReadFile(nome do arquivo):
files = open(filename) lines =
[Link]() for index, line in
enumerate(lines): print(index, "=", line)
if [Link](".txt"): linhas =
open(filename) for line in
lines:print([Link]()) else:
except IOError as e:
print("Não foi possível abrir o arquivo:", e) def
LineStrip(): try: StripFile("primary/[Link]")
except IOError as e:
print("Could not open file:", e) # vai dar erro def
CheckFileExtension(): try: RaisingError("../primary/[Link]")
def DemarcationLine():
print("******************")
if __name__ == "__main __": main() </
code>
<blockquote>
Não foi possível abrir o arquivo: [Errno 2] Não existe tal arquivo ou
diretório: '../primary/[Link]'
******************
Não foi possível abrir o arquivo: [Errno 2] Arquivo ou diretório
inexistente: 'primary/[Link]'
******************
Nome de arquivo incorreto: o arquivo deve terminar
com .txt </blockquote>
Como exercício, tente escrever este código com “Try” e “Except” e pegue se
houver algum erro.
<code>
#!/ usr/ bin/ python3 def
main():
GetARangeOfNumber() def
GetARangeOfNumber():
para índice em IteratingStepByStep(1,123, 7):
print(índice, end='')
def IteratingStepByStep(start, stop, step): number = start
while number <= stop: yield number number += step if
__name__ == "__main__": main() </code>
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_14
14. Funções
Sanjib Sinha 1
Vamos primeiro definir a função e tentar saber por que a função está sendo usada em
Python. Considere este código:
<código>
#!/ usr/ bin/ python3 def
main():
print("Esta é a função principal.") if __name__
== "__main__": main() </code>
E a saída é:
<blockquote> Esta
é a função principal. </blockquote>
O que isso significa? Em primeiro lugar, vamos entender o que significa função.
Uma função é usada em qualquer linguagem de programação para reutilizar o código.
Os programadores são preguiçosos e, portanto, não querem escrever de novo e de novo.
E não é uma boa ideia escrever sempre a mesma coisa. Então o conceito de reutilização
entra e usamos a função para fazer isso.
Você pode considerar um exemplo muito simples. Suponha que queremos usar
uma linha de demarcação repetidas vezes. Você vai escrever assim de novo e de novo?
Machine Translated by Google
<código>
print("*************") </code>
Ou você vai escrever uma função e chamá-la quando for necessário? Assim:
<código>
def DemarcationLine():
print("*********")
DemarcationLine():
DemarcationLine():
DemarcationLine(): </code>
Cada vez que você chamar a função “DemarcationLine()” ela imprimirá uma
linha de demarcação.
Agora vamos à primeira questão. É sempre uma boa prática escrever
funções dentro da função main() e você pode chamá-las a qualquer momento. O
controle de fluxo não segue necessariamente para baixo. Você pode testar:
<código>
OutraFunção()
TestFunction()
<código>
<blockquote> Vou
chamar outra função.
Eu sou outra função. </blockquote>
<código>
Machine Translated by Google
def TestFunction():
print("Vou chamar outra função.")
OutraFunção()
TestFunction()
<blockquote> Vou
chamar outra função.
Traceback (última chamada mais recente):
Arquivo
"/home/hagudu/PycharmProjects/FirstPythonProject/funct ions/
defining_functions.py", linha 17, em <module>
TestFunction()
Arquivo
"/home/hagudu/PycharmProjects/FirstPythonProject/funct ions/
defining_functions.py", linha 15, em TestFunction
OutraFunção()
NameError: o nome 'AnotherFunction' não está definido </blockquote>
Então, cada vez que você chama uma função dentro de outra função, você precisa defini-la
primeiro. Mas esse problema pode ser resolvido se você definir a função main() primeiro. Agora
considere este código:
<code>
#!/ usr/ bin/ python3 def
main(): TestFunction() def
TestFunction():
print("Vou chamar outra
função.")
OutraFunção()
Machine Translated by Google
<blockquote> Vou
chamar outra função.
Eu sou outra função. </
blockquote>
Agora veja, não nos preocupamos com a posição porque todas as funções estão
sob a função main(). Muito mais flexibilidade agora está sendo adicionada quando
você está usando a função main () como esta. Outra grande vantagem de usar função
é passar parâmetros ou argumentos por ela.
<code>
#!/ usr/ bin/ python3 def
main():
PassingParameters(1,2,3) def
PassingParameters(argumento1, argumento2, argumento3):
E a saída é:
<blockquote>
Aqui estão nossos argumentos: 1 2 3 </
blockquote>
<código>
#!/ usr/ bin/ python3 def
main():
PassingParameters(1) def
PassingParameters(argumento1, argumento2 = 4, argumento3 = 6):
print("Aqui estão nossos argumentos:", argumento1,
argumento2, argumento3) if
__name__ == "__main__": main() </
code>
E a saída:
<blockquote>
Aqui estão nossos argumentos: 1 4 6 </
blockquote>
<código>
#!/ usr/ bin/ python3 def
main(): PassingParameters(1,
10, 14) def PassingParameters(argumento1,
argumento2 = 4, argumento3 = 6): print("Aqui estão nossos
argumentos:", argumento1,
argumento2, argumento3) if
__name__ == "__main__": main() </
code>
E a saída:
<blockquote>
Aqui estão nossos argumentos: 1 10 14 </
blockquote>
Machine Translated by Google
<código>
E a saída:
<blockquote>
Aqui estão nossos argumentos: 1 Nenhum
6 </blockquote>
O que acontece se passarmos um novo valor para o argumento2? Considere este código:
<code>
#!/ usr/ bin/ python3 def
main(): PassingParameters(1,
12)
def PassingParameters(argumento1, argumento2 = Nenhum, argumento3
= 6): if argumento2 == Nenhum:
E a saída:
<blockquote>
Aqui estão nossos argumentos: 1 12 6 </
blockquote>
Valores de retorno Em
Python, uma função pode retornar qualquer valor. Ele pode retornar qualquer tipo de dado:
string, inteiro, objeto — qualquer coisa. Vamos retornar um objeto.
Considere este código:
<code>
#!/ usr/ bin/ python3 def
main(): for index in
ReturnValues(): print(index, end=" ")
def ReturnValues(): #return
"Retornando string." #return 56 return
range(10) if __name__ == "__main__":
main() </code>
E a saída:
<blockquote> 0 1
2 3 4 5 6 7 8 9 </blockquote>
Gerar funções Em
Python podemos gerar funções. Vamos explicar passo a passo.
Considere este código primeiro:
<code>
#!/ usr/ bin/ python3 def
main(): RangeFunctions()
def RangeFunctions():
<blockquote> 0 1
2 3 4 5 6 7 8 9 </blockquote>
<código>
#!/ usr/ bin/ python3 def
main():
for index in RangeFunctions(0, 10, 1): print(index,
end=' ')
main() </
código>
<blockquote> 0 1 2
3 4 5 6 7 8 9 10 </blockquote>
A saída será:
Como você viu, podemos definir o valor de qualquer argumento como padrão. Então nós
pode escrever esta função assim:
<código>
eu = começo
enquanto i <= parar: ceder
ii += passo
</código>
<code>
para índice em AnotherRangeFunctions(25): print(index, end='
')
Machine Translated by Google
</código>
Arquivo
"/ home/ hagudu/ PycharmProjects/ FirstPythonProject/ function ions/ generate-
[Link]", linha 18 def AnotherRangeFunctions(start = 0, stop, step
= 1):
SyntaxError: argumento não padrão segue o argumento padrão
Python não suporta isso. Podemos resolver este problema para que possamos passar
qualquer número de argumentos e controlá-lo sem ter nenhuma mensagem de erro?
Considere este código:
<código>
def AnotherRangeFunctions(*args):
numberOfArguments = len(args)
passo = 1
elif numberOfArguments == 2:
# start e stop serão tuplas (start, stop) = args
step = 1 elif numberOfArguments == 3: # all
start, stop e step serão tuplas (start, stop,
step) = args
eu = começo
enquanto i <= parar:
ceder ii += passo
</código>
Machine Translated by Google
Listas de argumentos Em
Python, às vezes, você precisa de um número arbitrário de argumentos e precisa
nomeá-los. Vamos escrever este código:
<código>
print(índice, end='')
<blockquote>
Machine Translated by Google
Em nosso código, *args ou *params significam listas de argumentos. Você pode passar
qualquer número de argumentos por eles. Em código
significa que você precisa passar quatro argumentos primeiro. Isso é obrigatório. Depois
isso, o número de argumentos pode variar. Mas o número arbitrário de
argumentos sai como “tupla”. Veja a saída desta função:
A última parte é obviamente uma tupla e você pode iterar por ela.
Argumentos nomeados Às
vezes é importante usar argumentos nomeados em Python. E obtemos esses
argumentos nomeados em um formato de dicionário.
Considere este código:
<código>
E a saída:
Machine Translated by Google
<blockquote>
passatempo = Jardinagem
nome = Endereço Sanjib
= Plutão </blockquote>
Como é uma saída de dicionário, não é ordenada. Você pode classificá-lo em ordem alfabética.
Vamos considerar um código bastante longo onde podemos usar todo tipo de passagem
argumento.
<código>
#!/ usr/ bin/ python3 def
main():
NamedArguments(nome = 'Sanjib', endereço =
'Plutão', passatempo = "Jardinagem")
DemarcationLine()
AnotherNamedArguments('Hi', 1235, 1,2,3, um =
1, dois = 2, três = 3)
DemarcationLine() para
chaves em kwargs:
print(keys, "=", kwargs[keys])
def DemarcationLine():
print("********")
<blockquote>
passatempo = endereço
de jardinagem = nome
Pluto = Sanjib
********
Oi 1235 1
2 3 ******** três = 3
dois = 2 um = 1 </
blockquote>
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_15
15. Aulas
Sanjib Sinha 1
Se você é um iniciante completo, provavelmente está ouvindo pela primeira vez sobre
“programação e aulas orientadas a objetos”. Vamos dar uma breve introdução à
programação orientada a objetos (OOP).
aula? Pode ser muito complexo. Imagine uma situação em que um “BadHuman” faz algo feio. Ao
mesmo tempo, um “GoodHuman” faz algo de bom.
Quem quer que faça qualquer coisa, a vida continua e isso também é orientação a objetos.
Você (um objeto) interage com sua televisão (outro objeto) por meio de mensagens
enviado através de um controle remoto (outro objeto).
Considere outro exemplo do mundo real de uma bola de futebol. Uma bola de futebol
tem um limite. Ele tem uma propriedade específica definida como salto. Você pode direcionar ou
aplicar algumas ações específicas chutando ou jogando.
Um objeto tem um estado. Pode exibir comportamento. Tem um ID único.
A diferença entre um objeto e uma classe é sutil, mas importante. Enquanto
uma classe é um conceito abstrato, um objeto é uma entidade concreta. A partir de uma
classe, objetos com propriedades específicas podem ser criados ou instanciados. É por isso que
um objeto costuma ser chamado de instância de uma classe.
Uma das principais características da programação orientada a objetos é o
“polimorfismo”. Polimorfismo é a capacidade de algo assumir diferentes formas. Na programação
orientada a objetos, o polimorfismo é a propriedade de que uma mensagem pode significar
coisas diferentes dependendo dos objetos que a recebem. A mensagem “Acelerar” significa uma
coisa se for enviada para um objeto “Carro Velho”. Mas significa outra coisa se for enviado para o
objeto “NewCar”. É um conceito natural que pode ser aplicado a objetos. Isso também significa que
objetos semelhantes geralmente aceitam a mesma mensagem, mas fazem coisas diferentes.
Considere uma página da web. É um objeto. Existem bilhões desses objetos ao nosso redor.
Quando você envia uma solicitação para um objeto como uma página da Web, na verdade aplica
um verbo “GET” a um substantivo “WebPage”. Agora todo objeto “WebPage” não se comporta da
mesma forma quando o verbo “GET” é aplicado. Alguém abre um arquivo PDF, alguém simplesmente
mostra alguns textos e imagens e alguém pode danificar seu computador. Quando você clica duas
vezes em um arquivo, ele pode ser executado se for um arquivo executável. Ou pode abrir em um
editor de texto se for um arquivo de texto. A mensagem
Machine Translated by Google
é igual. Isso é "Clique Duplo". Mas o comportamento exibido pelo objeto de arquivo depende
do próprio objeto.
Isso é polimorfismo. Você o aprenderá de cor à medida que progredir neste capítulo.
A vantagem das classes Python é que elas fornecem todos os recursos padrão
características da programação orientada a objetos. Ele possui o mecanismo de
. Issoquaisquer
herança de classes métodos
permite várias de sua
classes classe
base. Umaou classes
classe base, pode
derivada e um substituir
método pode chamar o método de uma classe base com o mesmo nome. Os objetos podem
conter quantidades e tipos de dados arbitrários.
Finalmente, lembre-se, em Python tudo é um objeto. Isso significa que há uma abstração
ou encapsulamento por trás dele. Você precisa entender a abstração primeiro e depois criar
sua própria abstração.
<código>
#!/ usr/ bin/ python3
Classe Robô:
def __init__(self): pass def
WalkLikeARobot(self):
print("anda como um robô.") def
CareLikeARobot(self): print("cuida como um
robô.") robu1 = Robot()
Machine Translated by Google
print(tipo(robu1))
print(id(robu1)) robu2 =
Robot() print(tipo(robu2))
print(id(robu2)) del robu2
def main(): robu = Robot()
print(tipo(robu ))
print(id(robu)) if __name__
== "__main__":
main() </code>
WalkLikeARobot(self): print("anda
como um robô.") def CareLikeARobot(self):
print("cuida como um robô.")
<blockquote>
<class '__main__.Robot'>
140445354614624 <class
'__main__.Robot'>
140445354668160
<class '__main__.Robô'>
140445354668160 </
blockquote>
As próximas linhas de código são um pouco mais longas, mas eu sugiro fortemente
que você as escreva em seu próprio editor de texto e execute o programa para ver se
obtém a mesma saída.
<code>
#!/ usr/ bin/ python3 class
Robôs:
def __init__(self): pass
def
WalkLikeARobot(self, style): [Link] =
estilo return [Link] def
CareLikeARobot(self): print("cuida
como um robô.")
class Humans:
def __init__(self, nature = "good"): [Link] =
nature
def GoodHumanBeing(self):
print("não precisa repetir, um bom ser humano
é sempre", [Link]) def
BadHUmanBeing(self): [Link]
= "não precisa repetir, ser humano mau é sempre mau."
print([Link]) def WalkLikeARobot(self, estilo): [Link] = estilo
return [Link] def main(): robu = Robots()
Machine Translated by Google
[Link]()
print([Link]("anda como um robô"))
HomemBom = Humanos()
print([Link])
[Link]()
BadMan = Humanos ()
[Link] = "mau"
print([Link])
[Link]()
print([Link]("ele é humano, mas
anda como um robô")) if
__name__ == "__main __": main() </
code>
O que isto significa? Significa que quando criamos uma instância humana deste
classe, assumimos que a natureza do objeto humano será, por padrão, boa.
Infelizmente, isso não acontece no mundo real. Tendo isso em mente, também
escrevemos esta linha: “[Link] = nature”. Isso significa que a natureza própria
ou a natureza da instância será boa se não mencionarmos explicitamente que é
"Ruim" ou outra coisa.
Nas etapas a seguir, quando criamos uma instância humana ruim, alteramos
explicitamente a natureza. Lembre-se, cada método é a parte da ação desse objeto.
Um objeto é um substantivo e faz alguma coisa. Em qualquer aplicativo de software
segue a mesma regra. Um exemplo de polimorfismo também está lá. Em ambas as
classes, “Robot” e “Human”, definimos um método:
Quando aplicamos esse mesmo verbo aos diferentes objetos Robô e Humano, ele exibe
um comportamento diferente. Se você executar este código, ele nos dará uma saída como esta:
<blockquote>
cuida como um robô. anda como
um robô bom não precisa repetir,
bom ser humano é sempre bom
mau não precisa repetir, mau ser humano é sempre mau. ele é humano
mas anda como um robô </blockquote>
Quando uma instância de Robot anda como um robô, ela exibe: anda como um
robô; mas quando uma instância de Human anda como um robô, ela exibe: ele é
humano, mas anda como um robô. Isso nada mais é do que um exemplo simples de polimorfismo.
Quando o mesmo verbo se aplica a dois objetos diferentes, dependendo da
natureza do objeto, dá uma saída diferente.
Na verdade, mudamos esse comportamento passando dois argumentos diferentes.
Suponha que, em vez de um único argumento, passemos um dicionário de valores. Veja
como o poder é ampliado. Considere um código simples abaixo:
<code>
print(type([Link](dict(one=1, two=2)))) st =
[Link](dict(one=1, two=2)) for keys in sorted(st):
print(teclas, st[teclas])
ws = [Link]({'one':56, 'two':2}) para chaves em
sorted(ws):
print(chaves, ws[chaves]) </
code>
<blockquote>
<class 'dict'> um 1
dois 2
Machine Translated by Google
um 56
dois 2 </
blockquote>
Você pode adicionar mais pares de chave e valor a este dicionário e executar este código
para ver o que acontece.
./ [Link]
O código é assim:
<código>
#!/ usr/ bin/ python3
Classe Robôs:
def __init__(self): passar
def BadHUmanBeing(self):
[Link] = "não precisa repetir, ser humano mau é sempre
mau." print([Link])
GoodMan = Humans() #
print([Link])
# [Link]()
BadMan = Humanos ()
# [Link] = "mau" #
print([Link])
# [Link]() #
print([Link]("ele é humano, mas
anda como um robô"))
# quando um homem mau anda como um robô muitas coisas
acontecem
WhenABadManWalksLikeARobot =
[Link](dict(change = 'ele se torna um monstro por
dentro',
ato = 'ele mata
companheiros',
sentir = 'ele gosta
torturando animais',
cuidado = 'ele cuida de
nenhum',
olhar = 'ele parece um
ser humano normal',
estado = 'finalmente ele
destrói a si mesmo'))
# há muitas ações que acontecem print("O que acontece
quando um Homem Mau anda como um
Machine Translated by Google
Robot?")
change = input("Diga-nos que tipo de mudança pode ocorrer dentro
dele?\n Escolha entre 'monstro' e 'anjo',"
WhenABadManWalksLikeARobot['change'] =
mudar
se mudar == 'ótimo':
print("Você venceu a segunda rodada:") recompensa =
10000
print("Você ganhou ", recompensa,
"pontos.")
print("O que ele sente por dentro? :",
WhenABadManWalksLikeARobot['feel'])
change = input("Diga-nos se o monstro se
importa com alguém?\n Escolha entre 'sim' e 'não',"
"pontos.")
print("O que ele sente por dentro? :",
WhenABadManWalksLikeARobot['care']) change = input("Diga-nos se o
aqui...>>>>")
WhenABadManWalksLikeARobot['cha
com'] = mudar
if change == 'yes':
print("Você ganhou o
quinta rodada:")
recompensa = 100000000
print("Você ganhou
Jackpot.", recompensa, "pontos.")
outro:
print("Você mudou o curso do jogo.
Termina aqui. Você perdeu", recompensa - 100000, "pontos.")
outro:
print("Você mudou o
curso de jogo. Termina aqui. Você perdeu", recompensa - 1000, "pontos.")
Machine Translated by Google
outro:
print("Você mudou o curso do jogo. Termina
aqui. Você perdeu", recompensa - 100, "pontos.")
outro:
print("Você mudou o curso do jogo. Termina aqui.
Você perdeu", recompensa - 10, "pontos.") else:
<blockquote> O
que acontece quando um homem mau anda como um robô?
Diga-nos que tipo de mudança pode ocorrer dentro dele?
Desde que escrevi o código, ganhei o jogo. Mas existem alguns truques. Naqueles
partes complicadas, se você falhasse e fornecesse entradas erradas, você perderia.
<código>
bom = Humano()
ruim = Humano("ruim")
print([Link] ())
print([Link] ())
if __name__ == "__main__": main()
</code>
<blockquote>
bom ruim </
blockquote>
Há algumas coisas que você precisa entender. Por que usamos “self”?
O que isso significa? Considere o código abaixo .
<código>
#!/ usr/ bin/ python3 class
MySelf: def __init__(self,
nome, quantidade): [Link] = nome [Link]
= quantidade def Eat(self): print([Link],
"comes", [Link], "bananas cada dia.")
def main(): hagu = MySelf("Hagu", 2) mutu =
MySelf("Mutu", 3) [Link]() [Link]() if __name__ ==
"__main__": main() </code>
vai ser criado. Quando escrevemos uma classe, assumimos que as instâncias
serão criadas. Neste caso, criamos dois objetos, “hagu” e “mutu”. Quando
aplicamos o verbo “Eat()” ou chamamos o método aos objetos, é como se eles
passassem pelo método. Definimos os nomes e o número de bananas que eles
comem. E a saída desse código é assim:
<blockquote>
Hagu come 2 bananas por dia.
Mutu come 3 bananas por dia. </
blockquote>
Mas precisamos de exemplos mais concretos. Queremos nos conectar aos nossos bancos
de dados de nossos aplicativos. Para isso precisamos de uma classe onde teremos métodos e
propriedades que irão se conectar aos bancos de dados.
Suponha que temos duas configurações diferentes. Temos um banco de dados
MySQL e, além disso, queremos criar uma conexão SQLite. Para fazer isso, podemos
escrever duas classes separadas e definir a conexão na parte do construtor ou método de
inicialização. Assim, quando criamos uma instância, a conexão com o banco de dados é
configurada automaticamente.
Considere o código:
<code>
#!/ usr/ bin/ python3
import sqlite3 import
[Link] from
[Link] import Error class
MySQLiteConnection: def __init__(self): db =
[Link]('[Link]') [Link]()
print ("Conectado ao SqLite3")
'passar')
con =
[Link](**kwargs) ###
conectando diretamente ### connection
=
[Link](host = 'localhost',
datado
se = 'python_mysql',
usuário =
'raiz',
passwo
rd = 'passar')
se connection.is_connected():
print("Conectado ao MySQL de
'conneection' object") # if
conn.is_connected(): #
print("Connected from 'conn'
objeto")
exceto Erro como e:
print(e) finalmente:
[Link]()
def principal():
ConnectToMySQL = MySQLConnection()
ConenctToSqLite = MySQLiteConnection() if __name__
== "__main__": main() </code>
<blockquote>
Conectado ao MySQL a partir do objeto 'connection'
Conectado ao SqLite3 </
blockquote>
Machine Translated by Google
<código>
#!/usr/bin/python3
db.row_factory = [Link]
print("Conectado ao SqLite3") def
Retrieve(self): print("Recuperando valores da
tabela test1
de teste de banco de dados SqLite")
read = [Link]('selecionar * de test1
ordem por i1')
for row in read:
print(row['t1']) class
MySQLConnection: def __init__(self,
kwargs = dict(host = 'localhost', database = 'testdb', user
= 'root', password = 'pass') ): tente: ### você pode usar um objeto de
dicionário ou conectar-se diretamente ###
se conn.is_connected():
print("Conectado ao banco de dados MySql testdb
do objeto 'conn'") exceto Erro como e: print(e) finalmente: [Link]() def
Retrieve(self): print("Recuperando registros do MySql
FUNCIONÁRIO")
rows = [Link]() print('Total
Row(s):', [Link]) for row in rows: print("First
Name = ", row[0]) print("Second Name = ", row[ 1])
print("Idade = ", linha[2]) print("Sexo = ", linha[3])
print("Salário = ", linha[4]) exceto Erro como e:
print(e) finalmente: [Link]() [Link]()
def principal():
ConnectToMySQL = MySQLConnection()
[Link]()
ConenctToSqLite = MySQLiteConnection()
[Link]()
if __name__ == "__main__": main() </
code>
Machine Translated by Google
Nós nos conectamos a cada banco de dados com o processo de inicialização e, em seguida,
aplique um verbo, “Retrieve()”, para cada objeto. Também importamos muitos
módulos de banco de dados que você ainda não aprendeu.
Você os aprenderá no devido processo. Mas o nosso propósito é servido.
Criamos dois objetos de banco de dados separados. Um é um objeto de conexão
MySQL e outro é um objeto de conexão SQLite. Depois disso, com esses objetos
podemos recuperar dados separados de duas tabelas diferentes.
Primeiro, olhe para a saída:
<blockquote>
Conectado ao banco de dados MySql testdb do objeto 'conn'
Recuperando registros do banco de dados MySql testdb.
Total de linhas: 3
Primeiro nome = Mac
Segundo nome = Mohan Idade
= 20 Sexo = M Salário = 2000,0
Primeiro nome = Mac
Papai
Bebê
Anju
Pergunta
Gasa Buda
Machine Translated by Google
Tapas
</blockquote>
A saída diz, o banco de dados MySQL “testdb” tem uma tabela chamada
“Employee” e há várias linhas como nome, sexo, salário, etc. Em segundo lugar, temos
um banco de dados SQLite3 “test1” que tem uma tabela chamada “test1” que tem muitas
linhas que contêm poucos nomes.
<código>
print([Link]) if
__name__ == "__main__": main() </
code>
Neste código, vemos a classe Human com uma altura padrão, que é 5,08. Quando
criamos um objeto, essa altura é definida automaticamente, a menos que a alteremos ou
a mencionemos explicitamente. Também podemos definir qualquer propriedade fora desse
objeto. Na próxima linha escrevemos [Link] = 5.11.
Podemos definir qualquer propriedade de objeto como esta. Mas isso é chamado de efeito
é muito difícil de rastrear,. colateral e então precisamos fazer isso de uma maneira mais estruturada. Como
podemos fazer isso? Vamos ver a saída deste código primeiro.
<blockquote>
Machine Translated by Google
5.08
5.11
</blockquote>
<code>
#!/ usr/ bin/ python3 class
Humano: def __init__(self):
pass
# acessador
def set_height(self, height): [Link] =
height
def get_height(self):
return [Link] def
main(): ramu = Human() # [Link]
= 5.11 # é chamado de efeito
colateral
e difícil de rastrear
ramu.set_height(5.12)
print(ramu.get_height())
if __name__ == "__main__": main()
</code> <blockquote> 5.12 </
blockquote>
Mas ainda estamos perdendo alguma coisa. Queremos adicionar mais flexibilidade para
que, com menos código, possamos realizar mais trabalhos.
<code>
#!/ usr/ bin/ python3 class
Humano:
def __init__(self, **kwargs):
Machine Translated by Google
ManaName = [Link]['nome']
mana.set_variables('classe', 'dois')
print(ManaName, "lê na aula",
mana.get_variables('turma')) mana.set_manyVariables(escola
= 'balika escola ', altura = 4,54) print(ManaName, "tem
altura de",
BabuName = [Link]['nome']
print(BabuName, "ele é aluno de",
[Link]['aluno_de'], "e ele lê em", [Link]['lê_em'], "e
seu
altura é", [Link]['height']) if __name__ ==
"__main__": main() </code>
Neste trecho de código, temos muitas opções abertas para nós. Definimos o
variáveis em uma chave de formato de . nosso Depois que podemos obter o valor através do
dicionário.
<blockquote>
Nome do Objeto Mana: Mana
Mana lê na classe dois
Machine Translated by Google
Este não é o único método para lidar com dados de objeto. Conforme você progride, você
veja muitos exemplos diferentes de manipulação de dados.
Polimorfismo O
polimorfismo é um conceito muito importante na programação orientada a objetos.
O básico é quando aplicamos o mesmo verbo em dois objetos diferentes, dependendo
dos objetos, eles reagem de forma diferente. Quando colocamos uma casa velha à venda,
ela atinge um certo valor. Mas quando colocamos uma casa nova à venda, ela alcança um
preço e um valor mais altos. Portanto, neste caso, quando aplicamos o método “sale” ou o
verbo “sale” a objetos diferentes, eles se comportam de maneira diferente.
<code>
#!/ usrbin/ python3 classe
Tabela:
def __init__(self): pass def
ItHolds(self):
print("Uma mesa contém
livros, blocos de escrita em
isto.")
def YouCanWriteOnit(self): print("Você
pode escrever em uma tabela.")
livro escolar:
def __init__(self): pass def
ItHelps(self): print("Um
livro nos ajuda a saber algo
novo.")
def principal():
MinhaTabela = Tabela()
MeuLivro = Livro()
Machine Translated by Google
[Link]()
[Link]()
[Link]() if
__name__ == "__main__": main() </
code>
<blockquote>
Uma mesa contém coisas sobre ela.
Você pode escrever em uma mesa.
Um livro nos ajuda a conhecer algo novo. </
blockquote>
<code>
#!/ usrbin/ python3
class Table: def
__init__(self): pass
def Get(self):
print("Por favor me dê aquela mesa.") def
Put(self): print("Por favor, coloque a mesa no canto
da sala.") def Destroy(self): print("Algumas pessoas
vieram e eles não queriam que nós lêssemos e escrevêssemos. Eles
destruíram a mesa.") livro de classe:
MeuLivro = Livro()
InMistake(MyBook)
Intencionalmente(MinhaTabela)
def InMistake(Tabela): [Link]()
[Link]()
[Link]() def
Intencionalmente(Livro): [Link]()
[Link]()
[Link]() if
__name__ == "__main__": main()
<código>
<blockquote> Por
favor, me dê aquele livro.
Colocamos alguns livros novos na mesa.
Algumas pessoas vieram e não queriam que a gente lesse
e escreva. Eles destruíram o livro.
Por favor, traga-me aquela mesa.
Por favor, coloque a mesa no canto da sala.
Algumas pessoas vieram e não queriam que a gente lesse e escrevesse.
Eles destruíram a mesa. </blockquote>
Usando Geradores
Machine Translated by Google
[Link] = 1 elif
numberOfArguments == 2:
# start e stop serão tuplas ([Link], stop)
= args [Link] = 1 elif numberOfArguments
== 3: # todos start e stop e step serão
tupla
([Link], [Link], [Link]) =
argumentos
def __iter__(self): i =
[Link]
while i <= [Link]: yield ii +=
[Link]
def principal():
intervalos = InclusiveRange(5, 210, 10) para x em
intervalos: print(x, end=' ')
Machine Translated by Google
Este código significa que você pode controlar o intervalo de iteração. Começamos a partir de 5
e depois terminamos em 210. Em cada etapa, avançamos 10.
<blockquote> 5
15 25 35 45 55 65 75 85 95 105 115 125 135 145
155 165 175 185 195 205 </
blockquote>
Podemos obter o mesmo efeito sem usar esses métodos. Podemos simplesmente
escrever desta forma.
<código>
tupla
([Link], [Link], [Link]) =
argumentos
</código>
Herança A
herança é um conceito igualmente importante na programação orientada a objetos.
Existe uma classe pai e uma classe filha. A classe filha geralmente herda todas as
propriedades e métodos da classe pai. Ao mesmo tempo, pode alterar todas as
propriedades e métodos de acordo com a situação.
A maneira como uma classe filha herda é muito simples. Quando declaramos uma classe filha
escrevemos o nome da classe pai dentro da classe filha assim:
ChildClass(ParentClass).
<código>
classe Admin(AllUsers):
def __init__(self): pass def
Register(self):
print("Admins need not
register") def Login(self): print("Welcome Admin")
class Members(AllUsers): def __init__(self):
passe
def main(): admin
= Admin()
Machine Translated by Google
[Link]()
[Link]()
membro = Members()
[Link]()
[Link]() if
__name__ == "__main __": main() </
code>
<blockquote>
Administradores não precisam
se registrar Bem-vindo Admin
Por favor, registre-se Bem-vindo
Membro. </blockquote>
Decorador
Decoradores são funções especiais que retornam funções. Normalmente, para definir
uma propriedade de objeto, geralmente a obtemos por meio de outra função.
<code>
#!/ usr/ bin/ python3 class
Cachorro:
[Link](chave, nenhum)
def principal():
lucky = Dog(nature = 'obedient')
print([Link]('nature'))
<blockquote>
obediente </
blockquote>
<código>
@[Link] def
Color(self, color):
[Link]['color'] = color @[Link]
def Color(self): del [Link]['color'] def main():
lucky = Dog( )
Machine Translated by Google
A saída é a esperada:
<blockquote> preto
e amarelo </blockquote>
É um exemplo muito simples onde vemos que uma sintaxe usual de função pode
ser escrito como uma sintaxe de propriedade. É mais conveniente quando usamos esse
método decorador para salvar arquivos dentro de um banco de dados.
No último capítulo, veremos a aplicação web “Flask”. veremos como
podemos usar esse decorador para rotear nossas páginas da web.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_16
Sanjib Sinha 1
Em Python, uma string é um objeto. Como uma instância de “string de classe” pode chamar
qualquer função ou propriedade. Podemos mudar uma string para letras maiúsculas simplesmente
chamando uma função upper() .
Vamos abrir nosso terminal e digitar isto:
<código>
hagudu@hagudu-H81M-S1: $ python3
>>> s
>>> [Link]()
Machine Translated by Google
>>> [Link](100)
>>>
</código>
Acabamos de alterar uma string para letras maiúsculas e também adicionamos um número inteiro
a essa string.
No Python 2 foi feito assim:
Mas no Python 3.4 em diante, não o usaremos mais. Usaremos a função format()
assim:
>>> s = 'esta é uma string agora vamos adicionar um inteiro a ela
como string {}' >>> [Link](100) 'esta é uma string agora vamos
adicionar um inteiro a ela como sequência 100'
<código>
>>> s = 'isto é uma string'
>>> s
>>> [Link]()
>>> [Link]()
>>> s
>>> [Link]()
>>> s
>>> [Link]('é')
>>>
</código>
Vamos escrever mais alguns métodos de string. Você pode fazer quase tudo
com esses métodos. Você pode usar upper(), lower(), strip(), replace, find() e muitos
mais .
<code>
#!/ usr/ bin/ python3 s =
'isto é uma string' print([Link]('is'))
newstring = [Link]('this',
'that') print(newstring)
UpperString = [Link]()
print(UpperString) # string é
mutável, então id foi alterado para o
Machine Translated by Google
mesma string
print(id(s))
print(id(UpperString)) a = 'esta é uma
string com muitos espaços em branco no
começo e no fim'
# por padrão, remove o espaço em branco do início e do fim
RemovendoWhiteSpace = [Link]()
print(RemovingWhiteSpace)
print([Link]('this')) </code>
<blockquote> 2
</blockquote>
<código>
x, y = 10, 11 f = "este
{} é adicionado e depois adicionamos {}"
Machine Translated by Google
FormattedString = [Link](x, y)
print(FormattedString) # poderíamos ter escrito
no estilo C m, n = 10, 11 f = "este %d é adicionado e
depois adicionamos %d"
FormattedString = f % (x, y)
print(FormattedString) </code>
A saída é a mesma.
</blockquote> este
10 é adicionado e depois adicionamos 11 este 10 é
adicionado e depois adicionamos 11 </blockquote>
<código>
a, b = 10, 11 s =
"Este é {} e aquele é {}"
FormattedStirng = [Link](a, b)
print(FormattedStirng) # mudamos a posição
FormattedStirng = [Link](b, a)
print(FormattedStirng) s = "Este é {0}, aquele
é {1} e este também é
<blockquote>
Este é 10 e aquele é 11
Este é 11 e aquele é 10
Este é 10, e aquele é 11 e este também é 10 e
isso também é 11
Este é 11, e aquele é 11 e este também é 10 e
isso também é 11
Este é 10, e aquele é 11 e este também é 11 e
isso também é 10
Este é o meu desejo: quero remover 'eu', e esse é o seu desejo: você
deseja remover 'você mesmo'? e isso também é meu: eu quero remover 'eu'
e isso também é
mine: eu quero remover 'eu' </
blockquote>
print(tipo(strings))
print(id(strings))
AnotherStrings = "Isto é uma string"
print(type(AnotherStrings)) print(id(AnotherStrings))
print([Link]()) words = [Link]()
[Link]("e isso também é uma string." )
print(tipo(palavras)) print(palavras[0])
NovasPalavras = ":".join(palavras)
print(NovasPalavras)
NewWords = ",".join(words)
print(NewWords) words[0] = "Isso"
print(words) </code> <blockquote>
<class 'str'> 139956209543256
<class 'str'> 139956209543256 ['This
', 'is', 'a', 'string'] <class 'list'> This
This:is:a:string:and that ia also a
string.
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_17
Sanjib Sinha 1
Python tem algumas funções internas para lidar com arquivos. Você pode abrir um arquivo e ler o
que está dentro. Você pode escrever um arquivo. Esse arquivo pode ser um arquivo de texto ou
uma imagem.
Cada vez usamos o método open() e passamos o modo como um argumento. Para
lendo um arquivo escrevemos “r” e para escrever usamos “w”. Vamos considerar um código
onde em um objeto lemos um arquivo e o escrevemos em outro arquivo usando outro objeto
na próxima etapa.
<code>
infile = open('[Link]', 'r') outfile = open('[Link]',
'w') for line in infile:
<código>
BufferSize = 500000 infile =
open('[Link]', 'r') outfile = open('[Link]', 'w')
buffer = [Link](BufferSize) while len(buffer):
[Link](buffer ) print("Está copiando, pode
demorar um pouco...por favor aguarde....", end='')
buffer = [Link](BufferSize)
print()
print("Copiando feito.") </code>
A saída é a esperada.
<blockquote> Está
copiando, pode demorar um pouco...por favor
espere....
Copiando feito. </
blockquote>
Ler e escrever arquivo binário é o mesmo. Tudo o que você precisa fazer é mudar
o modo de “r” para “rb” e mudar o modo de “w” para “wb”. É isso.
Seu código fica assim:
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_18
18. Contêineres
Sanjib Sinha 1
Em Python, tuplas e listas são tipos de array. As tuplas são imutáveis, mas as listas
são mutáveis. As tuplas são usadas com o operador vírgula e você pode iterar pela tupla
com bastante facilidade. Como as tuplas são imutáveis, você não pode adicionar ou
atualizar o valor de uma tupla. Nas listas, você pode atualizar ou adicionar novos valores
com bastante facilidade. Abra seu terminal no Linux e IDLE no Windows. Anote o código
.
abaixo e veja você mesmo a saída. Por favor, leia os comentários que acompanham o código
<code>
#!/ usr/ bin/ python3
tuples1 = 1, 2, 3, 4
print(type(tuples1))
print(id(tuples1)) tuples2
= (1, 2, 3, 4)
print(type(tuples2) ))
print(id(tuples2))
print(tuples1[0])
print(tuples2[0]) # dará o
último item print(tuples2[-1])
print(type(tuples1[0]))
print( type(tuples2[0]))
print(id(tuples1[0])) print(id(tuples2[0]))
# tupla é imutável, não podemos
alterar nenhum valor # objeto 'tuple'
não suporta atribuição de item
Machine Translated by Google
# tuples2[0] = 120 #
print(tuples2) # para
fazer uma tupla inteira você precisa adicionar uma vírgula
separadora
IsItTuple = (1)
print(type(IsItTuple))
IsItTuple = (1,)
print(type(IsItTuple)) # vamos
ver como a lista se comporta list1 = [1,
2, 3, 4] print(type(list1)) print(id(list1)) #
primeiro item print( list1[0]) # último
item print(list1[-1]) # podemos alterar o
valor de um item da lista list1[0] = 120
print(list1) # output: [120, 2, 3, 4] </
código>
A saída é assim:
<blockquote>
<class 'tuple'>
139794725901080
<class 'tuple'>
139794725900920 1 1
4 <class 'int'>
<class 'int'>
10455040
10455040 <class
'int'> <class
'tuple'> <class 'list'>
139794725273480
Machine Translated by Google
1 4 [120, 2, 3, 4] </
blockquote>
<code>
root@kali: # python3 Python
3.4.4 (padrão, 5 de janeiro de 2016, [Link])
[GCC 5.3.1 20160101] no linux Digite
"ajuda", "direitos autorais", "créditos" ou "licença"
Para maiores informações.
>>> t = (1,2,3,4) >>> t
(1, 2, 3, 4) >>>
t[0] 1 >>> t =
tuple(range(25))
>>> type(t) <class 'tuple'> >>> 50
in t
Falso
>>> 10 em t
8
9
Machine Translated by Google
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> l = list(range(20)) >>>
type(l) <class 'list'>
>>> para i em l:
... imprimir(i)
Arquivo "<stdin>", linha 2
print(i)
^
13
14
15
16
17
18
19
>>> l[2] 2
>>> 50 em l
Falso
>>> 12 em l
apenas ( licença(lista( eu
dado)
>>> [Link](5) 1
>>> [Link](25)
>>> [Link](25) 2 >>>
[Link](10) 10 >>>
[Link](10) 10 >>>
[Link](range(25))
>>> for i in l:print(i)
...
25
12
34
6
7
8
9
10
11
12
13
14
15
16
17
18
19
120
25 0
12
3
Machine Translated by Google
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 24 >>> [Link](0, 4656) >>>
l[0] 4656 >>> [Link](12, 147)
>>> [Link](12) 14 >>> l[12]
147
[4656, 25, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 147, 11, 13, 14, 15, 16, 17, 18, 19, 120,
25, 0, 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
>>> l. pop(0) 4656 >>> print(l) [25, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 147, 11, 13, 14, 15,
16, 17, 18 , 19, 120, 25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22 , 23, 24] >>> [Link]() 24
</código>
Anote o mesmo código e veja como funciona na sua máquina. Erros podem
aparecer como aconteceu no código acima. Mas lembre-se, cada erro o ajudará
a aprender algumas coisas novas.
<code>
root@kali: # python3 Python
3.4.4 (padrão, 5 de janeiro de 2016, [Link])
[GCC 5.3.1 20160101] no linux Digite
"ajuda", "direitos autorais", "créditos" ou "licença"
Para maiores informações.
>>> x = {'um':1, 'dois':2, 'três':3} >>> type(x) <class
'dict'>
Machine Translated by Google
'sete': 7, 'três': 3}
>>> para i em z:print(i)
...
oito
dois
nove
um
Sete
three
>>> for key, value in [Link]():print(key, value)
...
oito 8
dois 2
nove 9
um 1 sete
7 três 3
>>> for
key, value in [Link](): if key == two: print(value)
...
...
...
Traceback (última chamada mais recente):
Arquivo "<stdin>", linha 2, em <module>
Machine Translated by Google
...
oito
dois
nove
um
Sete
Quanto mais você gasta tempo com tuplas, listas e dicionários, mais aprende sobre
Python. Existem muitas funções internas e você pode usá-las facilmente para obter mais
do seu código. Outro conceito-chave do dicionário é o par "chave=>valor". À medida que
você avança e aprende mais linguagens junto com o Python, você descobrirá que cada
linguagem usa esse conceito, levando-o adiante para resolver os principais problemas.
Os frameworks web, em particular, usam muito esse conceito.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_19
Sanjib Sinha 1
<código>
#!/ usr/ bin/ python3 import
sqlite3 def main():
db = [Link]('[Link]') db.row_factory
= [Link] [Link]('eliminar tabela se
existir test1') [Link]('criar tabela test1 (texto t1, i1
int)')
[Link]('insert into test1 (t1, i1) values
(?,?)', ('Nenhuma', 1))
[Link]('insert into test1 (t1, i1) values
Machine Translated by Google
# print(dict(row))
print(row['t1']) #
print(row['t1'], row['i1']) # print(type(row))
if __name__ == "__main__": main() </código>
Se você executar este código, verá uma lista de nomes que acabei de adicionar. Como você vê,
nós nos conectamos com um banco de dados, “teste”. Em seguida, adicionamos
uma tabela com duas colunas. A primeira coluna é o id inteiro e mantemos o ID de cada
nome dentro dela. A segunda coluna é o espaço reservado do texto. Mantemos alguns
nomes lá.
Você pode escrever o mesmo código e testá-lo. Ele lhe dará o mesmo resultado.
Depois de executar o código, você descobrirá que um arquivo “[Link]” foi criado dentro
do seu projeto.
é bem fácil.
No Python2*, você pode, por padrão, importar o MySQL Connector. Mas para
Python3, você precisa baixar o arquivo. Abra [Link] e procure por
MySQL Connector. Baixe o arquivo e execute “[Link]”.
Depois de baixar e instalar o módulo MySQL Connector, é bastante
simples e fácil de conectar a qualquer banco de dados MySQL.
Considere este código em que simplesmente nos conectamos a um banco de dados MySQL e
temos uma impressão “conectada”.
Se o MySQL ou qualquer operação de banco de dados for completamente novo para você, é melhor
aprenda sobre as operações simples do banco de dados e a linguagem de consulta do banco
de dados. No Windows ou no Linux, instalar o PHPMyAdmin é muito fácil. Basta instalá-lo e você não
precisa escrever todo o código SQL para construir um banco de dados e todas as tabelas.
Vamos supor que temos um banco de dados chamado “python-mysql”. Nesse
banco de dados temos algumas tabelas. Agora vamos nos conectar a esse banco de dados
primeiro.
<código>
###
kwargs = dict(host = 'localhost', banco de dados
= 'python_mysql', user = 'root', senha = 'pass') conn =
[Link](**kwargs) ### conectando
diretamente ### connection = [Link](host
=
'localhost',
datado
se = 'python_mysql',
usuário =
'raiz',
passwo
Machine Translated by Google
rd = 'pass') if
conn.is_connected(): print("Conectado
do objeto 'conn'") exceto Erro como e: print(e) finalmente:
[Link]() if __name__ == "__main__": ConnectionTest( ) </
código>
Isso nos dará uma impressão “Connected from a conn object”. Isso significa
que a conexão do banco de dados foi configurada. Agora é hora de recuperar o valor da
tabela.
Neste banco de dados temos duas tabelas. Uma é de “autores” e a outra é de
“livros”. A classe MySQL Connector possui todas as funções necessárias para executar
qualquer tarefa nessas tabelas. Você pode buscar todos os registros. Você pode decidir
quantos livros ou quantos autores gostaria de buscar. O código a seguir mostra ambos.
Mas algumas partes foram comentadas.
Para testar este código você precisa ter um banco de dados primeiro. Nomeie-o como “python-mysql”.
Em seguida, você precisa ter duas tabelas chamadas “autores” e “livros”. Você também
precisa preencher essas tabelas. É sempre melhor pesquisar online e baixar um banco
de dados e tabelas MySQL prontos. Eles estão disponíveis. É altamente recomendável
que você procure por MySQL Connector e veja o que encontra.
No código a seguir, percorra também as seções comentadas. Que
diz muito sobre como você pode recuperar seus registros e mostrá-los ao mundo.
<code>
#!/ usr/ bin/ python3 import
[Link] from
[Link] import Error def RetrieveValues():
try: kwargs = dict(host = 'localhost', database
cursors = [Link]()
[Link]('SELECT * FROM
autores')
# row = [Link]() # output
(1, 'Bel and the Dragon ', '123828863494') ###### #
agora tentamos pegar todos os livros # row = [Link]() #
print( type(row)) # saída <class 'list'>, então
podemos usar
para loop
# para livros em linha: #
print(books) # nos dará
uma lista de todos os livros ###### ### agora damos o
tamanho de quantos livros queremos obter ### #
HowManyBooks = 8 # row =
[Link](HowManyBooks) # for books in row: # print(books) #
obtemos a saída de 8 books row = [Link]() for
books in row: print(books) except Error as e: print (e)
finalmente: [Link]() if __name__ == "__main__":
RetrieveValues() </code>
não mostre uma mensagem feia de “Erro” em seu projeto. Em segundo lugar, este método é
bastante direto. Você também pode usar um arquivo de configuração para fazer a mesma coisa.
É altamente recomendável usar um arquivo de configuração (nós dizemos “arquivo de configuração”).
O arquivo de configuração contém todas as coisas necessárias para se conectar ao banco de dados.
Podemos escrever no arquivo de configuração assim e salvá-lo
como “mysql_config.ini”.
<código>
[mysql]
host = banco de dados
localhost = YourDatabaseName
usuário = root
senha = senha </code>
Vamos ver como esse arquivo “.ini” pode ser analisado através do nosso código Python.
Salvamos este arquivo como “MySQL_Connector.py”.
<code>
#!/ usr/ bin/ python3 from
configparser import ConfigParser def
ReadingMySQLConfig(filemame = 'mysql_config.ini',
section = 'mysql'): parser = ConfigParser() [Link](filemame)
db = dict() if parser.has_section(seção):
outro:
raise Exception('{0} não encontrado no
{1} file'.format(section, filemame)) return db
</código>
<code>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from
MySQL_Connector.mysql_config import ReadingMySQLConfig def
Connect(): kwargs = ReadingMySQLConfig()
<código>
#!/ usr/ bin/ python3 # -*-
codificação: utf-8 -*- import
[Link] from
[Link] import Error def connect(): """
Conectar ao banco de dados MySQL """ tente:
con =
Machine Translated by Google
[Link](host='localhost',
banco de dados='Yo
urDatabase',
user='root',
password='Yo
urPassword') if
conn.is_connected():
print('Conectado ao banco de dados MySQL') exceto
Erro como e: print(e) finalmente: [Link]() if __name__ ==
'__main__': connect() </code>
print(e)
finalmente:
[Link]()
[Link]() if
__name__ == '__main__':
query_with_fetchall() </code>
<code>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from MySQL_Connector.mysql_config
import ReadingMySQLConfig def InsertBooks(books): query = "INSERT INTO
books(title, isbn)
InsertBooks(books)
print("Um livro inserido")
if __name__ == "__main__": main()
</code>
<ocde>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from
MySQL_Connector.mysql_config import ReadingMySQLConfig def
UpdateBooks(book_id, title): kwargs = ReadingMySQLConfig() data = (title,
book_id) query = "UPDATE books SET título = %s WHERE id =
%s"
[Link]()
exceto Erro como e: print(e)
finalmente:
[Link]() def main():
elif id == 5:
UpdateBooks(id, "Play With Python") print("Um
livro foi atualizado") if __name__ == "__main__":
main() </code>
<code>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from
MySQL_Connector.mysql_config import ReadingMySQLConfig def
DeleteBooks(book_id): kwargs = ReadingMySQLConfig() query = "DELETE
FROM books WHERE id = %s" try: MyConnection =
MySQLConnection(**kwargs) cursor = [Link]()
[Link](query, (book_id,))
[Link]()
exceto Erro como e: print(e)
finalmente:
[Link]() def main():
id = 87 DeleteBooks(id)
print("Deleted ", id, "number of book
from books") if __name__ ==
"__main__": main() </code>
<code>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from
MySQL_Connector.mysql_config import ReadingMySQLConfig def
ReadFile(filename): with open(filename, 'rb') as f: images = [Link]() imagens de
retorno
[Link]() exceto
Erro como e: print(e) finalmente:
[Link]() def main():
Machine Translated by Google
id = 47
UpdateImage(id, "/home/hagudu/Pictures/[Link]") print("Imagem da
ID do autor", id, "foi atualizada.") if __name__ == "__main__": main()
< /código>
O código é bastante simples. Pelo menos nesta fase você deve achar simples.
As etapas são assim:
3. Por fim, chamamos a segunda função e passamos o caminho do arquivo de imagem como
um argumento para que nosso código Python chegue lá e recupere a imagem
abrindo-a e finalmente confirmando no banco de dados .
Agora vamos recuperar uma imagem do banco de dados e gravá-la em
nosso disco local. No código anterior, lemos o arquivo. Agora é hora de gravar o
arquivo em nosso disco. O código é quase semelhante, exceto por algumas alterações.
<code>
#!/ usr/ bin/ python3 from
[Link] import MySQLConnection, Error from
MySQL_Connector.mysql_config import ReadingMySQLConfig def
WriteFile(data, filename): with open(filename, 'wb') as files: [Link](data )
def ReadImage(author_id, filename): kwargs = ReadingMySQLConfig()
query = 'SELECT photo FROM authors WHERE id =
Machine Translated by Google
%s'
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_20
20. Módulo
Sanjib Sinha 1
<code>
#!/ usr/ bin/ python3 import
sys, os, [Link] def main():
Machine Translated by Google
módulo #urllib
página =
[Link]('[Link] para linha na página:
print(str(line, encoding='utf-8'), end='')
<blockquote>
Esta é a versão do Python: 3.4.3 posix /
usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/ sbin:/bin:/usr/games:/usr/ local/games /home/hagudu/
PycharmProjects/FirstPythonProject/mod ules
<!DOCTYPE html>
<html lang="en"> <head>
Machine Translated by Google
<blockquote> Esta
é a versão do Python: 3.4.4 nt
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\
Wbem;C:\Arquivos de Programas\Microsoft SQL
Servidor\90\Ferramentas\binn\
D:\pthon-files-fromwindows </blockquote>
<code>
#!/ usr/ bin/ python3
import sys, os, [Link], random, datetime def main():
# módulo aleatório
print([Link](1, 1000)) x =
list(range(25)) print(x) [Link](x)
print(x) [Link](x) print(x)
[Link] (x) imprimir(x)
PresentTime = [Link]()
print(PresentTime) print([Link],
[Link], [Link], [Link],
[Link], [Link], [Link])
Neste código adicionamos mais dois módulos. Eles são “aleatórios” e “data e hora” .
Obtemos a saída abaixo para ver como eles funcionam.
</blockquote> Esta
é a versão Python: 3.4.3 366 [0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24] [23, 6, 22, 3, 7, 19,
10, 16, 8, 12, 15, 21, 11,
17, 9, 13, 4, 14, 24, 18, 0, 2, 1, 20, 5] [0, 8, 21, 5, 13, 3, 2,
18, 24, 12, 4, 19, 14 , 17,
20, 10, 11, 22, 15, 9, 6, 23, 1, 7, 16]
Machine Translated by Google
[11, 6, 23, 14, 9, 7, 3, 5, 15, 2, 19, 0, 16, 24, 21, 12, 4, 13, 22, 20, 10, 8,
1, 17, 18 ]
//aqui está a saída do módulo de data e hora 2016-03-23
[Link].253888 2016 3 23 8 34 37 253888 </blockquote>
Cada vez que você executa o código, você obtém um novo número, pois o módulo
. a PythonPara
“aleatório” sempre produz novos números. Standard
obter mais
Library
ideias,
no site
você
oficial
precisa
do Python
acessar
ou baixar a documentação do Python 3.4.4 . Está disponível em vários tipos de arquivo,
incluindo arquivo de texto simples ou PDF. A página do módulo “datetime” na Python
Standard Library na documentação se parece com isso:
Agora você pode voltar aos seus códigos antigos e vê-los novamente sob uma nova luz.
Agora você entenderá facilmente por que usamos o módulo MySQL
.
Connector ou o módulo Configuration Parser
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_21
Agora você progrediu muito. No processo de codificação, você deve ter encontrado ou visto
muitos tipos de erros. É bastante óbvio. Os programadores experientes também cometem erros.
Você também aprendeu a detectar seus erros. Mas a situação pode surgir quando você precisar
atualizar seu código. Pode acontecer. Você precisa modificar ou adicionar algumas linhas em
seu código. Pode funcionar ou pode falhar. Em suas novas linhas de código, pode haver erros
. tentaPython
“sintáticos” Podem haver erros de “tempo de execução”. Normalmente, o interpretador orientá-
lo nesses casos. Geralmente indica onde ocorreu o erro. Mas não sempre.
Ao mesmo tempo, temos dois métodos separados que começam com a palavra “teste”.
Os métodos são “test_PyVar()” e “test_main()”.
<código>
def principal():
PyVer()
PyTime()
def test_Pyvar():
PyVer()
def test_Main():
PyTime() if
__name__ == "__main__": main()
<código>
Quando você executa este código, sua função main() chama os dois métodos
definido dentro dela. E a saída abaixo é o que se espera.
</blockquote> Esta
é a versão do Python: 3.4.2 2016-04-22
[Link].435691 2016 4 22 23 30 30 435691
</blockquote>
<code>
#!/ usr/ bin/ python3 #
coding=utf-8 import
[Link] import unittest class
SayTiemDate([Link]):
def setUP(self):
passar
def test_Version(self):
[Link]([Link] Ver(),
[Link].test_Pyvar())
def test_Time(self):
[Link]([Link] in(),
[Link].test_Main())
if __name__ == "__main__":
[Link]() </code>
O que esse código diz? Como você pode ver, existem dois métodos:
“test_Time()” e “test_Version() ”. Não passamos nenhum argumento. Ambos os
métodos chamam um método padrão do módulo “unittest”. E isso é “assertEqual()”.
Através deste método passamos dois métodos que definimos anteriormente na
pasta “MyTest/BrainAndSoul”. Dentro dessa pasta temos um arquivo Python
chamado “[Link]”. Agora estamos comparando dois métodos através do
nosso módulo “unittest”.
Por fim, ele fornece uma boa saída como esta, se tudo funcionar corretamente.
<blockquote> O
teste começou às 20:58 Esta é a ...
versão do Python: 3.4.2 Esta é a versão do
Python: 3.4.2 Processo concluído com o
código de saída 0 </blockquote>
Se executarmos esse código novamente, podemos obter uma saída como esta:
<blockquote> Esta
é a versão do Python: 3.4.2 2016-04-23
[Link].608853 2016 4 23 5 47 23 608853
2016-04-23 [Link].608951 2016 4 23 5 47 23
608951 Esta é a versão do Python: 3.4.2 Esta é
a versão do Python: 3.4.2
..
-------------------------------------------------- -
-------------------
Realizou 2 testes em 0,001s
OK
<blockquote> Esta é
a versão do Python: 3.4.2 2016-04-23
[Link].994547 2016 4 23 5 51 45 994547 Esta é
a versão do Python: 3.4.2 Esta é a versão do
Python: 3.4.2
E.
==================================================== =
===================
-------------------
"/home/ss/FirstPythonProjects/PlayWithPython master/MyTest/
[Link]", linha 17, em test_Time [Link]([Link]
[Link](), [Link].test_Main())
Arquivo
Arquivo
-------------------------------------------------- -
-------------------
Realizou 2 testes em 0,001s
FALHA (erros = 1)
Machine Translated by Google
Agora você pode tentar executar mais módulos de teste de unidade. Aqui está outro exemplo
onde o teste é bem sucedido.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_22
Você pode criar aplicativos da Web com a ajuda do Python ou fazer algumas coisas de
rede de segurança. Finalmente, como eu, você pode escolher o interessante caminho do
hacking ético. Todas essas coisas e muito mais você pode fazer através do Python.
Vamos ver como podemos aplicar nosso conhecimento básico de Python em socket e
rede. Anote este código em seu IDE e veja qual saída você obtém.
<code> #
coding=utf-8 import
socket
print([Link]("[Link]. com"))
print([Link]("[Link] [Link]"))
</código>
A saída é assim na minha máquina. Você pode testar qualquer outro site para obter
seu endereço. Esta é a ponta do iceberg. Muitas coisas estão dentro. É melhor você ver
tudo o que está dentro do que eu contar, pois acho que você deveria se concentrar em
tentar escrever conceitos básicos de Python cada vez mais.
<blockquote>
[Link]
Machine Translated by Google
[Link]
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_23
Sanjib Sinha 1
Nmap (Network Mapper) é um scanner de segurança. Foi originalmente escrito por Gordon Lyon
(também conhecido por seu pseudônimo Fyodor Vaskovich). Esta ferramenta é particularmente usada
para descobrir hosts e serviços em uma rede de computadores. Ao encontrar os hosts e serviços, ele cria
um “mapa” da rede. Por esta razão, tem sido amplamente chamado de 'Nmap' ou você também pode
chamá-lo de 'Network Mapper'. É considerado uma ferramenta essencial em sua busca para ser um
hacker ético bom e competente.
Para obter os melhores resultados, o Nmap geralmente envia pacotes especialmente criados para o
host de destino e, em seguida, analisa as respostas e descobre quais portas estão abertas. Também
avalia a vulnerabilidade de uma rede de computadores.
Este software amplamente utilizado pelos hackers possui vários recursos. Na verdade
sonda redes de computadores, descobrindo hosts e serviços. Ele também detecta o sistema
operacional e decide a vulnerabilidade dos sistemas encontrando as portas abertas.
Na verdade, o Python estende esses recursos para que você possa fazer mais facilmente
detecção avançada de serviço, detecção de vulnerabilidade e outras coisas.
Vamos primeiro verificar se o módulo 'Nmap' do python já foi instalado em nosso sistema ou
não, emitindo um simples comando no terminal.
nmap
Isso nos dá uma longa lista que é muito importante. Muitas coisas você pode aprender com
esta listagem, pois diz sobre a versão, usos e no final também diz onde você pode obter o manual para
mais leitura.
Machine Translated by Google
ESPECIFICAÇÃO DO ALVO:
hosts/redes
--excludefile <exclude_file>: Excluir lista do arquivo
DESCOBERTA DO HOSPEDEIRO:
-sL: List Scan - simplesmente liste os alvos para escanear -sn: Ping Scan
- desabilite a varredura de portas
-Pn: trata todos os hosts como online -- ignora a descoberta de host
servidores DNS
--system-dns: Use o resolvedor de DNS do sistema
operacional --traceroute: Rastreie o caminho do salto para cada host
TÉCNICAS DE
VARREDURA: -sS/sT/sA/sW/sM: TCP
Varreduras SYN/Connect()/ACK/Janela/Maimon
-sU: Varredura UDP
-sN/sF/sX: Varreduras TCP Nulo, FIN e Xmas --scanflags <flags>:
Personalizar flags de varredura TCP -sI <zombie host[:probeport]>:
Varredura ociosa -sY/sZ: SCTP Varreduras INIT/COOKIE-ECHO -sO:
varredura de protocolo IP
Machine Translated by Google
-r: Varre portas consecutivamente - não randomiza --top-ports <número>: Faz varredura
de <número> portas mais comuns --port-ratio <proporção>: Faz varredura de portas mais
comuns que <proporção>
(intensidade 2)
--version-all: Tenta todas as sondas (intensidade
9)
--version-trace: Mostra a verificação de versão detalhada
atividade (para depuração)
VARREDURA DE CRITÉRIO:
categorias --script-
args=<n1=v1,[n2=v2,...]>: fornece argumentos para scripts --script-args-
file=filename: fornece script NSE
argumentos em um arquivo
--script-trace: Mostra todos os dados enviados e recebidos --script-updatedb: Atualiza o
banco de dados do script. --script-help=<Lua scripts>: Mostra ajuda sobre scripts.
script-categorias.
DETECÇÃO DO SO:
TEMPO E DESEMPENHO:
As opções que levam <tempo> estão em segundos ou acrescentam
'ms' (milissegundos),
's' (segundos), 'm' (minutos) ou 'h' (horas) para o valor (por exemplo, 30m).
SAÍDA:
EXEMPLOS:
nmap -v -A [Link] nmap -v -sn
[Link]/16 [Link]/8 nmap -v -iR 10000 -Pn -p 80
Você pode obter mais informações sobre o Network Mapper na internet. Siga
estes links. [Link] [Link] [Link]
[Link] [Link] [Link] https://
[Link]/book/[Link] Se na sua versão 'Linux' do sistema operacional padrão
você não conseguir isso
Em sua máquina virtual, se você executar o kali Linux, verá que o 'Nmap' já foi instalado.
Agora, depois que esta parte da instalação terminar, podemos rapidamente ter um
pequeno script python para ver como nosso módulo 'Nmap' está funcionando.
Você já aprendeu a usar o editor de texto 'nano' em seu terminal. Então abra-o com este
comando:
Ele primeiro pedirá sua senha de root e, em seguida, abrirá o editor de texto
nano em seu terminal. Escreva um pequeno script como este:
#!/usr/bin/python import
nmap nm =
[Link]() def
callback_result(host, scan_result):
print ('------------------') print (host, scan_result)
[Link]('[Link]', arguments="-O -v",
callback= callback_result)
Esperando >>>
------------------
[Link]
ISP: Some Internet LTD
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_24
Sanjib Sinha 1
Agora estamos prontos para fazer mais testes de rede usando scripts python. E
desta vez vamos tentar construir um scanner mais robusto e também vamos tentar
detectar as portas abertas e ver se há alguma vulnerabilidade.
Vamos escrever o script python primeiro. E depois disso veremos a saída. Deixe-nos
altere o script '[Link]' para este:
#!/usr/bin/python import
nmap nm =
[Link]() print
(nm.nmap_version()) [Link]('[Link]',
'1-1024', '-v') print(nm. scaninfo()) print([Link]())
e;produto;informações extras;motivo;versão;conf;cpe
[Link];host3.x0x;PTR;tcp;22;ssh;abrir;;;sin-
Machine Translated by Google
ack;;3;
[Link];host3.x0x;PTR;tcp;25;smtp;abrir;;;syn ack;;3;
[Link];host3.x0x;PTR;tcp;53;domínio;abrir;;;syn ack;;3;
[Link];host3.x0x;PTR;tcp;80;http;abrir;;;syn ack;;3;
[Link];host3.x0x;PTR;tcp;137;netbios ns;filtrado;;;sem
resposta;;3; [Link];host3.x0x;PTR;tcp;138;netbios
dgm;filtrado;;;sem resposta;;3;
[Link];host3.x0x;PTR;tcp;139;netbios ssn;filtrado;;;sem
resposta;;3;
[Link];host3.x0x;PTR;tcp;445;microsoft
ds;filtrado;;;sem resposta;;3;
Isso mostra que todas as quatro portas juntas estão abertas. São eles: 22, 25, 53 e 80.
E os outros são filtrados.
Antes de irmos testar outra porta e dessa vez podemos mostrar o IP como é
de [Link] , vamos ver também
Você alguns fatos
poderápidos sobre
encontrar a terminologia
o lado do porto.
legal da digitalização
explicado aqui: [Link] .
#!/usr/bin/python import
nmap nm =
[Link]() print
(nm.nmap_version())
[Link]('[Link]', '1-1024', '-v') print(nm. scaninfo())
Machine Translated by Google
print([Link]())
A saída é assim:
(6, 40)
{'tcp': {'services': '1-1024', 'method': 'connect'}}
host;hostname;hostname_type;protocol;port;name;stat
e;produto;informações extras;motivo;versão;conf;cpe
[Link];;;tcp;25;smtp;abrir;;;syn-ack;;3;
[Link];;;tcp;53;domínio;abrir;;;syn-ack;;3;
[Link];;;tcp;80;http;open;;;syn-ack;;3;
As portas abertas são 25, 53 e 80. Não há portas filtradas exibidas nesta
máquina.
Vamos obter todos os hosts desse IP com uma pequena alteração em nosso script anterior.
Desta vez, reduzimos o intervalo para que nosso programa não seja executado por muito tempo.
#!/usr/bin/python import
nmap nm =
[Link]() print
(nm.nmap_version())
[Link]('[Link]', '22-455', '-v --version all') print(nm.all_hosts())
(6, 40)
{'tcp': {'services': '22-455', 'method': 'connect'}} ['[Link]']
#!/usr/bin/python import
nmap
Machine Translated by Google
nm = [Link]() print
(nm.nmap_version()) [Link]('[Link]',
'22-455', '-v --version-all') print(nm.all_hosts())
#!/usr/bin/python import
nmap nm =
[Link]() print
(nm.nmap_version())
[Link]('[Link]', '22-1024', '-v --version all') print ([Link]()) print
(nm['[Link]'].state()) print (nm['[Link]'].all_protocols()) print
(nm['[Link]'][' tcp'].keys())
(6, 40)
{'uphosts': '1', 'timestr': 'Seg 3 de outubro [Link] 2016', 'downhosts': '0',
'totalhosts': '1', 'elapsed': '5,73'}
para cima
['tcp'] [80, 25, 53]
portos. As portas entre 49152 e 65535 devem ser para uso privado.
Vamos considerar a primeira saída e tentar entender qual porta é usada para
quais propósitos.
[Link];host3.x0x;PTR;tcp;22;ssh;abrir;;;syn
ack;;3;
[Link];host3.x0x;PTR;tcp;25;smtp;abrir;;;syn
ack;;3;
[Link];host3.x0x;PTR;tcp;53;domínio;abrir;;;syn
ack;;3;
[Link];host3.x0x;PTR;tcp;80;http;abrir;;;syn ack;;3;
[Link];host3.x0x;PTR;tcp;137;netbios ns;filtrado;;;sem resposta;;3;
[Link];host3.x0x;PTR;tcp;138;netbios dgm;filtrado;;;sem resposta;;3;
[Link];host3.x0x;PTR;tcp;139;netbios ssn;filtrado;;;sem resposta;;3;
[Link];host3.x0x;PTR;tcp;445;microsoft
ds;filtrado;;;sem resposta;;3;
A porta 22 é usada para 'SSH'. Significa 'Secure Socket Shell'. É um protocolo de rede
com o qual os administradores acessam um computador remoto de forma segura.
A porta 25 é para SMTP ou correio.
A porta 53 significa Serviços DNS.
A porta 80 é para o tráfego da web.
As portas 137, 138 e 139 são capturadas pela Microsoft para transportar seus
Protocolo NetBIOS sobre redes LAN e WAN baseadas em IP.
Por fim, a porta 445 é usada para o Microsoft Directory Services. Para ler mais sobre
esta porta, você pode achar este link interessante: [Link] .
Machine Translated by Google
Parte III
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_25
Isso é muito importante para hackers éticos. Você precisa permanecer anônimo e ocultar seu
endereço IP enquanto estiver no mundo do hacking ético. Existem várias maneiras de fazer
isso. Discutiremos neste capítulo como podemos fazer isso.
Existem procuradores. Isso significa que você está roteando através de roteadores diferentes,
mas pode ser muito lento e não estar ao seu alcance. Outra desvantagem de usar proxies é que
você não sabe nada sobre o outro lado. Você está no escuro sobre os servidores através dos
quais seus pacotes estão se movendo. Então isso pode ser muito arriscado. Você pode perguntar
por que isso é perigoso. Eu faria algum tipo de trabalho de “mapeamento da rede”. É inofensivo.
Talvez sim. Mas não se restringe apenas a essa parte. Usando proxy, você pode querer entrar
em algum servidor. Depois de digitar sua senha, ela pode ser invadida.
além de um intervalo. Suponha que seu endereço IP esteja fora desse intervalo.
Mas as pessoas costumam usar proxies ou VPNs – nem sempre para fazer algo
malicioso, como derrubar um servidor ou roubar dados. As pessoas podem querer
ocultar sua localização apenas quando estão viajando ou esse tipo de coisa.
Aparentemente esse tipo de atividade fica dentro da lei.
Há outro problema que pode surgir quando você acessa um determinado tipo
de servidor que geralmente permite endereços IP de uma determinada região. Nesse
caso, se você usar um endereço IP da China ou da Rússia, o administrador da rede
certamente irá atrás de você. Portanto, é um problema consistente que continua vindo
e atormentando você de vez em quando e nos próximos capítulos gostaríamos de
abordar esses problemas.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_26
Enquanto isso, daremos uma olhada rápida na dark web ou na web oculta.
Não sei se você já ouviu falar sobre isso antes. consiste em uma grande
“deep web” a Internet. É algo como “matéria escura” que parte
consiste
do O
emboato
97 ou
éa98“dark
por cento
web” ou
da
massa do universo. Ainda não se sabe o que é realmente, exceto por algumas coisas.
As pessoas dizem que a dark web está cheia de informações que normalmente não
obtemos. E você não pode acessar a dark web através do seu navegador normal.
Você precisa de um tipo especial de navegador para entrar nesse labirinto de mistérios.
Devo avisá-lo antes de tentar o Tor e entrar na dark web. Existem muitas atividades ilegais,
geralmente acontecendo fora de nossa percepção normal. Pode ser como o tráfico humano.
Pode ser como tráfico ilegal de armas. Pode ser como contratar
assassinos e outros enfeites. Mas neste livro não estamos interessados neles. Nossa principal
preocupação é o conhecimento. Chegamos lá para ter uma ideia do que realmente está
acontecendo na dark web.
Como um hacker ético, você precisa saber tudo para um e apenas um propósito. Você
. você está
precisa lutar contra um ataque malicioso, defender-se, não atacar alguém. Masaprendendo
para se a
defender, você precisa conhecer todas as táticas que seu inimigo costuma usar. Talvez a polícia
peça sua ajuda para rastrear um abusador de crianças. Sem conhecer o caráter adequado da
dark web, você não pode fazer isso. Se você não sabe como ocultar seu endereço IP, como
poderia localizar um criminoso que está escondendo sua localização real?
Além disso, você precisa saber outra coisa importante. A web escura não é
sempre ruim nesse sentido. Você pode encontrar muitos hackers de renome de chapéu
branco ou chapéu cinza em certos fóruns que são mantidos completamente ocultos do vigilante
Machine Translated by Google
olhos dos órgãos governamentais. Você pode encontrar pessoas realmente úteis lá que podem
ajudá-lo a resolver seu problema instantaneamente. Como a Wikipedia, existem wikis ocultos
que veremos em breve, onde você pode encontrar muitas coisas interessantes para aprender.
Wikipédia oculta
Para ler o wiki oculto, precisamos instalar o navegador Tor. O Kali Linux não vem com ele por
padrão, então você precisa instalá-lo.
Para fazer isso, primeiro você precisa fazer login como o novo usuário: xman. Em seguida,
abra o navegador normal e procure o navegador Tor. Basta acessar o site oficial e baixar a
versão mais recente do Kali Linux. Tenha cuidado ao verificar se é [Link] não
qualquer outra coisa. Pode vir com “[Link] sem o “s”. Simplesmente evite isso.
Existem termos e condições que você deve cumprir. E o termo principal é que você deve
permanecer dentro da lei. Você não pode usar o Tor para nenhum processo ilegal. O Tor
também oculta seu endereço IP. Mas isso é uma questão diferente.
Machine Translated by Google
Uma vez conectado, ele abrirá sua primeira página padrão, que você acharia bem diferente
do navegador normal. Em primeiro lugar, você pode digitar “qual é o meu IP” e verificar o que
aparece.
Com certeza será algo diferente da região onde você está. Mas nós
precisamos de páginas da web wiki ocultas originais que nos levarão à dark web.
Lembre-se, existem vários sites que afirmam ser wiki oculto original. Portanto, é preciso
ser criterioso na escolha. Geralmente eles vêm com domínios “.onion” e a URL muda
continuamente. Assim, você pode digitar algo como “url wiki oculto” e ver o que obtém.
Machine Translated by Google
Figura 26-4. Uma das páginas ocultas do Wiki - isso pode ser vago
Uma coisa é melhor você ter em mente: o navegador Tor está bem contanto que você queira
para aprender algo novo. Não se destina a fazer algumas coisas duvidosas. Existem muitas
atrações baratas que definitivamente tentariam chamar sua atenção ou até mesmo forçá-lo a ir
até elas. Tenha cuidado ao escolher os sites que você está visitando. Desde que seja um fórum
de hackers, tudo bem. Mas uma vez que você ultrapassa o limite sem cumprir a lei, pode ser
perigoso.
Agora vamos passar para coisas que estão mais diretamente conectadas ao mundo real
hacking ético. Mas antes disso, precisamos ver como as cadeias de proxy e as VPNs
funcionam.
Seu pouco conhecimento dos comandos do Linux será útil. A partir de agora, inicialize seu
tudo o que fizermos será na máquina virtual do terminal Kali Linux e . Kali
abriremos seu terminal. Primeiro aprenderemos sobre cadeias de proxy e, com a ajuda
desta ferramenta, como podemos ocultar nosso endereço IP e obter
acesso a um servidor remoto.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_27
Sanjib Sinha 1
Ele abrirá o arquivo “[Link]”. Existem três tipos de proxies que você
pode usar. Mas você não pode usar todos os proxies ao mesmo tempo. Vamos
primeiro ver como este arquivo se parece. Tem 68 linhas. Mas não é muito
complicado se você entender as linhas. As documentações são claras e objetivas.
Aqui estão as primeiras linhas importantes.
# apenas uma opção deve ser descomentada por vez, # caso contrário,
a última opção que aparecer será aceita # dynamic_chain
Machine Translated by Google
#
# Dinâmico - Cada conexão será feita via
proxies encadeados
# todos os proxies encadeados na ordem em que aparecem na lista
# pelo menos um proxy deve estar online para jogar em cadeia
O que isto significa? Ele diz que a lista de proxy tem várias opções. Você
deve saber como deve tratar essas opções. Se você ler cada linha, terá uma
ideia de como funciona. Existem três tipos de proxies. Você precisa descomentar
qualquer um deles.
O primeiro proxy é “dynamic-chain”. Você vê a linha acima e o vermelho
a cor mostra que eu a descomentei. Existem mais dois proxies:
“strict_chain” e “random_chain”. Eles são comentados. Eles têm suas próprias
descrições. Vamos ler os dois.
#string_chain #
Espero que o primeiro passo esteja claro. Vamos considerar alguns outros passos importantes.
No meio, você obtém uma linha como esta:
É uma linha muito importante a ser considerada com seriedade. Você vê que
eu descomentei o “proxy_dns”. Você não pode permitir que dados de DNS vazem. Em
outras palavras, seu endereço IP real não deve ser vazado por acaso. É por isso que
descomentei esta linha, para que seus proxies estejam no local adequado funcionando sem
problemas.
No final da lista, você encontrará esta linha:
[Lista de proxy] #
adicione proxy aqui ... # média
# padrão definido como "tor"
meias4 [Link] meias5 [Link]
9050
9050
# Exemplos:
#
# meias 5 [Link] 1080 eu sou
é segredo # tu
escondido # http [Link] 8080 você
#
meias4 [Link] http 1080
[Link] 8080
Ele indica claramente como sua lista de proxy deve ser formatada. Considere a primeira
linha:
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_28
Desde o início tento enfatizar uma coisa. O hacking ético começa com um único conceito:
anonimato.
Você primeiro deve garantir que você é anônimo. Você não deixou rastros nas suas costas.
Toda a sua jornada está oculta e ninguém pode traçar sua rota posteriormente.
Discutimos o navegador “Tor” e “cadeias de proxy”. Nós vimos como
podemos usá-los. Outro conceito muito importante a esse respeito é a rede privada
virtual ou VPN, para abreviar.
Ele basicamente lida com as configurações do servidor DNS. Um servidor DNS
normalmente verifica a filtragem de tráfego. Portanto, se você pode alterar a configuração
do servidor DNS em sua raiz, pode desviar essa leitura.
Como podemos fazer isso?
Abra seu terminal Kali Linux e digite:
cat /etc/[Link]
Se você adivinhou que eu realmente mudei isso, você está certo. Eu mudei.
Por que eu mudei isso? Deixe-me explicar.
Você precisa entender o conceito de “nameserver” primeiro. O que isso faz?
O endereço IP da LAN realmente encaminha o tráfego para os servidores DNS, que por
sua vez resolvem as consultas e enviam o tráfego de volta de acordo.
Ao fazer isso, ele também registra a quantidade de tráfego que você está tendo através do
seu gateway doméstico. Não precisamos disso. Por que não precisamos disso? Precisamos ser
anônimos. Portanto, essa é a principal razão por trás da alteração desse servidor de nomes.
Podemos fazer isso através de rede privada virtual ou VPN.
Vamos abrir o terminal novamente e digitar este comando:
nano /etc/dhcp/[Link]
Máquina virtual Kali Linux. Você percebe que há muitas coisas escritas ali. Mas estamos
interessados nesta linha intermediária:
Agora tudo que você precisa fazer é uma coisa. Você tem que reiniciar a rede
gerente . Digite este comando em seu terminal Kali Linux: service
network-manager restart Agora você pode verificar seu
servidor de nomes novamente. Ele mostrará dois novos endereços.
Outra coisa é importante aqui. Você precisa verificar se a conexão de mídia
está habilitada ou não. Abra seu navegador Mozilla (no Kali Linux é “Iceweasel”).
Você o encontra no painel superior esquerdo.
Abra o navegador e digite “about:config”. Se parece com isso:
Machine Translated by Google
Se você usa Chrome ou Opera, isso mostrará outra coisa. Você precisa clicar e entrar
nele. Entrar nele garantirá um painel de pesquisa na parte superior, onde você digitará o termo
de pesquisa: “[Link] ”.
Vamos ver como fica.
Na imagem acima, é mostrado “true”. Você precisa clicar duas vezes nele e fazer
o valor booleano “falso”.
Agora você pode procurar a rede privada virtual aberta gratuita. Lembrar,
as pessoas geralmente compram a mesma coisa e pagam um preço alto por isso. Mas eles
não estão seguros o tempo todo. Por que eles não são seguros? É porque, às vezes, quando
a segurança nacional de um país está sob ataque e eles querem as informações, as empresas
de servidores precisam fornecê-las sob pressão. Então, o tempo todo tentei enfatizar uma
coisa: nunca tente ir acima da lei. O hacking ético tem tudo a ver com algo que mantém
estritamente um e único princípio: permanecer dentro da lei.
Você aprende tudo para sua autodefesa, não para qualquer tipo de ataque
antecipadamente. De qualquer forma, neste capítulo, nosso principal objetivo é como
podemos ocultar o servidor DNS de nosso provedor ISP.
Machine Translated by Google
Pesquisamos sobre VPN aberta e encontramos “[Link]”. Nós vamos baixar deste
site. No painel direito, você encontrará o nome dos provedores. Varia de tempos em tempos. De
qual país você fará o download realmente não importa, desde que funcione.
Durante o download, você notará que uma combinação de nome de usuário e senha é
fornecida. Copie-os e salve-os em algum lugar, pois você precisará deles ao executar a rede
privada virtual em sua máquina.
Na seção de download do seu Kali Linux, você tem uma versão compactada da VPN.
Descompacte-o primeiro e depois execute-o. Como você pode fazer isso? Deixe-me abrir minha
seção “Download” do Kali Linux e ver o que vejo.
Para obter a mesma saída, você deve descompactar sua versão compactada da VPN. Agora
emita este comando:
openvpn [Link]
Se a máquina dissesse “comando openvpn não encontrado”, você teria que instalá-lo.
Instalar qualquer coisa através do terminal é bastante fácil no Linux. Pesquise na web; há toneladas
de tutoriais que irão guiá-lo sobre isso. Geralmente isso é feito pelo comando “apt-get” Quando
você tenta executar o “openvpn” ele irá pedir o. nome de usuário primeiro. Aí ele vai pedir a senha.
Depois que esse processo estiver concluído,
esperar
ele tentará
algum tempo.
construir
A amenos
conexão.
que Você
você precisa
receba uma
mensagem, “inicialização completa”, você não pode abrir seu navegador. Pode levar vários minutos.
Normalmente leva no mínimo dois minutos.
Se você não tiver sorte, pode levar algum tempo - nem sempre, é claro. Esse
mensagem não aparecerá. Nesse caso, diz "falha na conexão".
Depois de receber a mensagem “inicialização concluída”, você pode abrir o navegador
e pesquisar em “[Link]”. Esse mecanismo de pesquisa geralmente não
rastreia o registro do usuário.
Seu primeiro trabalho será verificar o vazamento de DNS. Vá em frente e você definitivamente
encontrar um endereço IP alterado.
Machine Translated by Google
Isso significa que você se conectou com sucesso através do privado virtual
rede e seu servidor DNS ISP original está completamente oculto.
Machine Translated by Google
© Sanjib Sinha
2017 Sanjib Sinha, Beginning Ethical Hacking with Python, DOI 10.1007/978-1-4842-2541-7_29
Sanjib Sinha 1
Aprendemos muitos truques até agora - tudo sobre anonimato. Mas vamos sempre
tentar ir para um nível superior. Alterar o endereço MAC se enquadra nessa categoria.
De forma simples, é o seu endereço de hardware. Basicamente, não é o
endereço de hardware da sua máquina, mas é o endereço de hardware da sua
placa de rede através da qual você está conectado ao mundo externo.
Vamos iniciar nossa máquina virtual Kali Linux e abrir o terminal. Emitir
o comando: ipconfig .
Ele produzirá algo assim:
lo:
flags=73<UP,LOOPBACK,RUNNING> mtu
Machine Translated by Google
Este é o endereço MAC da máquina virtual Kali Linux ou o endereço da placa de rede local
. Agora, em alguns casos, pode ser assim: HWaddr [Link] Em alguns
casos é diferente. São placas de rede. Podem ser placas Ethernet,
adaptadores
placas wireless,
wireless, etc.
Como você vê, ele mostra dois endereços MAC - um é atual e o outro é permanente.
Você pode perguntar por que estou verificando isso aqui. Eu verifiquei uma vez emitindo o
comando “ifconfig”. Isso não é o suficiente?
É porque o comando “ifconfig” mostrará apenas o endereço MAC atual. Não mostrará
o endereço MAC permanente. Isso significa que quando você alterou o endereço MAC e
emitiu o comando “ifconfig”, ele mostra apenas o endereço alterado, não o permanente.
Agora gostaríamos de mudar nosso endereço MAC. Vamos emitir este comando:
root@kali: # macchanger –h
Até agora, a melhor opção disponível para nós é a linha verde — -r, -- random
Definir um MAC totalmente aleatório — onde é dito claramente que você pode definir um
MAC totalmente aleatório. Ou seja, os seis conjuntos são completamente aleatórios – o que
preferimos.
O mais importante deles é a última linha de cor azul. Por que isso é
importante? É porque você pode alterar o endereço MAC completamente.
Podemos ter uma lista de todos os fornecedores com um simples comando: l. Se você emitir isso
comando, ele fornecerá uma lista muito longa. Vamos pegar alguns deles.
root@kali: # macchanger -l
Diversos MACs:
Pegamos as primeiras linhas - dezenove no momento. Mas o último é 19010 - [Link] - Hitachi
Reftechno, Inc. O número vermelho mostra quantos existem no total. A lista não está completa.
Depois disso, existem os endereços MAC sem fio. Ao todo são cerca de trinta e nove.
Você pode perguntar o que eles são realmente. Eles nada mais são do que os
bits do endereço MAC da empresa. Consideremos o último exemplo: 0019 - [Link]
– CAMEX.
O primeiro é o número de série. O segundo é o endereço MAC. Você
pode alterar o endereço do fornecedor e usar este e fingir estar usando esta empresa. Os hackers
éticos às vezes usam esse truque.
Tendo tudo em mente, gostaria de dizer que a última opção - o azul
colorido - é o mais importante.
Nas faculdades, os alunos às vezes usam esse truque para enganar o professor, junto
com toda a classe. Alguém pega o endereço MAC do professor e, fingindo ser o PC do
professor, bloqueia a rede. Uma vez que a rede foi congestionada, o professor não pode mais dar
aula.
Normalmente, há um sistema de filtragem de rede que descobre o endereço MAC
não autorizado e bloqueia esse endereço. Mas isso também é divertido. Quando o
sistema de filtragem de rede bloqueia o endereço MAC, descobre-se que o PC do
professor foi bloqueado inadvertidamente.
Como um hacker ético, você precisa estudar esta parte particularmente, já que os
hackers mal-intencionados geralmente usam o endereço MAC da máquina de outra pessoa e
fingem ser alguém enquanto fazem as coisas erradas.
Machine Translated by Google
Obrigado por ler este volume de Ethical Hacking with Python 3. Espero
que, como iniciante, você aprendeu os fundamentos do hacking ético . Isso
inclui os termos, o lado legal e a finalidade; rede, o ambiente e uma introdução detalhada
sobre anonimato. Além disso, espero que você tenha um conhecimento prático do
Python 3.
Os próximos volumes de livros sobre Ethical Hacking tratarão de conceitos
mais avançados como “Nmap”, “SQL Injection”, “Denial of Service ou DOS”,
“Método de Força Bruta”, “Bloqueio de Sinal”, “Quebra de Senha”
“Footprinting with Nmap,” “Attacking Wireless Networks,” “WiFi Hacking, Breaking
Encryptions”, “SLl Strips” e muito mais.
Espero encontrá-lo no próximo livro. Até então, boa sorte.
Machine Translated by Google
Índice
A,B
Métodos de acesso
AMD64
Proteção de anonimato, Internet
C
Classe string
format() função
imutável posição
inferior() substituir e
localizar() tira()
superior()
Comunicação
Execuções condicionais
Valores/expressões condicionais
Módulo analisador de configuração
Codificação de
contêineres
Machine Translated by Google
D
Web escura/Deep Web
Datagrama
Debian
decoradores
E
Função enumerate() de comunicação
de ponta a ponta
hacking ético
Exceções
F,G
Entrada e saída de arquivo
Sistema de verificação de quadro (FCS)
Função
Codificação de
AnotherFunction()
DemarcationLine() gera
funções listas de
argumentos nomeados
argumentos passando
valores padrão passando
parâmetros/argumentos
Reutilização dos
valores de retorno
RangeFunctions()
TestFunction()
Machine Translated by Google
H
Ataque de
hackers, métodos de exploração/penetração
computadores número de cartão de crédito/
débito criminosos ambiente
máquina
virtual de linguagem
de programação de sistemas
operacionais anônimos
máquina virtual
Wikipédia oculta
páginas Wiki ocultas
mercado interessante
Arquitetura do sistema
terminal Kali Linux
Navegador Tor site
[Link] Tráfico humano
EU J
Herança
Organização de Padrões da Internet (ISO)
Internetworking
k
Kali LinuxGenericName
eu
Distribuição Linux
terminal Linux comando
adduser anonimato
comando cat cat
[Link] | grep
origem
Machine Translated by Google
comando cd
comando chmod
ferramenta de linha de comando/
terminal comando cp comando cp–
help diretórios e pastas comando
echo hacking ético modo executável
permissão de arquivo comando
grep comando grupo Iceweasel
Kali Linux visualização em tela
cheia sair comando ls comando ls–
la comando mkdir comando mv
editor de texto Nano saída
comando pwd [Link] arquivo
Python comando rf comando rm
root/superusuário comando rx
comando sanjib [Link]
comando sudo endereço da placa
de rede local função loops()
M
Comando de
endereço
MAC hackers éticos
Machine Translated by Google
ifconfig
ipconfig
placa de rede
filtro de rede saída do sistema
ataque malicioso
Controle de acesso à mídia (MAC)
Programa
de calculadora de módulo
Linux Distribuição Debian sistema
operacional/módulo específico do sistema
programe solicitação aleatória e data/hora e
responda sys/módulo específico do sistema urllib
Arquivo de
N
Machine Translated by Google
Características da
rede funções de comunicação
interoperabilidade engenharia
modular recursos de
compartilhamento tipos de
soquete
placas de rede
Objeto
Programação orientada a objetos (OOP)
acessando classes de vantagem de dados
de objeto e argumentos de objetos
codificação padrão definição de argumento
inicialização instâncias de processo
métodos MyMySQLConnection() e
MySQLiteConnection()
Banco de dados
MySQL mecanismo
de herança de classe de saída
jogo de descrição do decorador,
geradores bons e ruins herança
de objetivos inter-relações e
interações de dados objeto objeto
vs polimorfismo aplicativos de
software
. aula
Machine Translated by Google
método open()
da página da web
Open Systems Interconnection (OSI) camada de
aplicação camada de enlace de dados camada de
rede camada física camada de apresentação
camada de sessão camada de transporte
P, Q
Filtragem de pacotes
comutação de pacotes
Seleção de caminho
Polimorfismo
Proxies
Arquivo de
configuração de cadeias de proxy
teste de vazamento de DNS
DNS solicita
documentações
dynamic_chain
lista de
endereços IP
random_chain
strict_chain
tor
tipos
Python
atribuindo valores
codificando comentários
condicionais dicionário
para loops indentação e
instaladores de espaço
em branco
Machine Translated by Google
valores lógicos
main() números da
função saída do
objeto
OutsideMainFunction() fora da
função print() função print()
string tuplas e listas tipo e ID
while loops
Página de
documentação
Intérprete de
instruções IDLE
Saída de linguagem de
Plataforma Windows/Macintosh
Biblioteca Padrão do Python
R
função range()
Expressões regulares re
módulo reutilizando
pesquisa
roteadores
S
Machine Translated by Google
Segmento
Efeito colateral
soquete
Instalação de software
SQLite3
Comuta
Erro de sintaxe
T
Protocolo de Controle de Transmissão/Protocolo de Internet (TCP/IP)
tente bloquear
Tuplas
TypeError
EM
ubuntu
centro de software ubuntu
uname-a
Módulo Unittest
mensagem de
erro assertEqual()
MyTest/BrainAndSoul
PyCharm IDE [Link]
erros sintáticos test_PyVar()
e test_main() test_Time() e
test_Version()
[Link]
EM
[Link] Virtual
Box Guest Additions Vantagem do
Virtual Box (VB) apt-get update apt-
get upgrade Arquitetura de 32
bits/64 bits
Machine Translated by Google
nome do servidor
gerenciador de rede
opendns princípio
openvpn versão
compactada
Machine Translated by Google
WXYZ
Windows XP