Esse artigo não tem como intuito ensinar a programar, e sim mostrar pra vocês como é pratico trabalhar com ruby e criar aplicações diarias como de costume e/ou grande projetos, em geral achei uma ótima linguagem para o hacking, possui funções de sistema e não deixa a desejar na web, estudei ruby durante três dias e adorei, aconselho a todos verificarem e lerem a seguinte pagina da wikipedia, com a descrição da mesma.
Interpretador
Ruby é uma linguagem orientada a objetos interpretada de código livre, podem fazer o download em http://www.ruby-lang.org/en/downloads/ , possui versões para as principais plataformas, a IDE pode ser chamada na linha de comando digitando irb ou se preferirem podem usar o interpretador online no seguinte endereço http://tryruby.hobix.com/, lembrando que para programas mais complexos precisaremos utilizar a linha de comando passando como argumento o nome do programa, do mesmo modo que em perl python etc.
Input / Output
A sintaxe é simples, vejam
//puts “hello word”//
que retorna “hello word”, é como utilizar
//#include
int main() {
printf(”legal”);
}//
Em C… para input, ou seja : entrada de dados utilizamos gets
variavel = gets
A diferença com outras linguagens é que em ruby automaticamente é adicionado nova linha no final de cada valor de entrada e saida, por exemplo se eu digitar “legal” o valor retornado será “legal\n” .
Em C o seguinte codigo retorna “legalrox”
#include
int main () {
printf(”legal”);
printf(”rox”);
}/
O que é diferente em ruby, se fizessesmos dois puts do mesmo jeito, seria retornado “legal” e “rox” em linhas diferentes, codigo
puts “legal”
puts “rox”
Como podem observar, a diferença está nos simples detalhes que ao decorrer de muito trabalho
torna uma linguagem superior à outra em um determinado objetivo.
torna uma linguagem superior à outra em um determinado objetivo.
Operadores de fluxo
Como dito no wikipedia, a sintaxe é bem “enxuta”, vejam exemplo de if, elsif, else
if 0 > 1
puts “eita interpretador ta doido”
elsif 1 == 1
puts “ta normal…”
elsif 1 > 1
puts “ta rox d+”
else
puts “esse um é uma string e vai dar erro na comparação”
end
Tambem podemos usar unless
unless 1 < 0
puts “verdadeiro, porque unless é ao contrario de if, no caso unless quer dizer \”se não\”, no nosso exemplo se 1 não for menor que 0″
else
puts “é…1 é menor que 0″
end
Pros programadores de plantão reparem nessa parte
valor = 100
numero =
case valor
when 0..10
puts “entre 0 e 10″
when 10..20
puts “entre 10 e 20″
when 20..100
puts “entre 20 e 100″
else
puts “valor não está entre as comparações”
end
Pra quem não entendeu, o case pode ser usado para pegar ranges, e ainda guardar o valor retornado..
No nosso exemplo a variavel valor armazena o valor 100, a variavel numero pega todo o bloco e guarda o resultado dele, os when são para comparar ranges… foi retornado “entre 1 e 100” porque valor está entre 1 e 100.
Loops
Vamos começar pelo while
i = 1
while i < 10
puts i
i += 1
end
retorna :
1
.
.
.
9
For já é mais interessante, achei ele melhor que em outras linguagens, vejam
for i in 0..5
puts i
end
retorna :
0
1
2
3
4
5
Reparem que dois pontos, retorna seis valores, por causa do 0, se se usarmos tres pontos, retornaria apenas o numero exato de valores passado para a função, exemplo
for i in 0…5
puts i
end
retorna :
0
1
2
3
4
for em array
a = ['nascer', 'crescer', 'morrer']
for id in a
puts id
end
retorna :
nascer
crescer
morrer
for com uma faixa de caracteres
for letras in ‘a’..’z’
puts letras
end
retorna :
a
.
.
.
z
Obs : existem varios outros operadadores que podem ser encontrados na documentação do ruby
Tratamento de erros
Para tratar erros, utilizamos o bloco begin/end e rescue, observe o exemplo
begin
i = 1
j = ‘1′
dois = i + j
rescue
puts “ocorreu um erro, impossivel completar operação”
end
O que aconteceu no exemplo acima é que não podemos somar um fixnum com uma string, então ocorre o erro “TypeError”, se fosse pra tratar um erro especifico, deveriamos usar o seguinte
begin
i = 1
j = ‘1′
dois = i + j
rescue TypeError
puts “ocorreu um erro, impossivel completar operação”
end
Observem na diferença de rescue TypeError.
Podemos ter varios rescues tratando erros especificos, e um default que trate todos, exemplo
Podemos ter varios rescues tratando erros especificos, e um default que trate todos, exemplo
begin
i = 1
j = ‘1′
dois = i + j
rescue TypeError
puts “TypeError”
rescue
puts “ocorreu um erro, impossivel completar operação”
end
Quando o interpretador encontra um erro, ele pula pro primeiro rescue e continua assim até encontrar um rescue correspondente, depois de encontrar ele continua lendo o bloco, por exemplo
begin
i = 1
j = ‘1′
dois = i + j
rescue TypeError
puts “rox”
puts “legal”
rescue
puts “ocorreu um erro, impossivel completar operação”
end
No exemplo acima tambem será mostrado “legal” porque o rescue foi encontrado antes do rescue default, se quisessemos que ele saisse do bloco após encontrar um rescue, deveriamos utilizar self.exit, deixo à vocês um desafio que irao adorar, já que até agora nao falei da melhor parte:
Basta usarmos “comando.” e apertar table duas vezes, vai aparecer a lista dos atributos do mesmo, podem procurar o que melhor lhes sirva, vale lembrar que o nome do bloco principal é main, então podemos utilizar main como comando pra saber os atributos dele, ou self para se referir ao bloco que está sendo executado.
Obs : o interpretador online não disponibiliza a lista de propriedade dos comandos.
Funções
Mostrarei o basico aqui, observe bem
def mostrar(a)
puts a
end
a = “legal”
mostrar(a)
def é uma função basicamente, no exemplo acima definimos mostrar que pega a variavel \\passada como referencia e usa puts pra mostra-la.
Podemos passar multiplas variaveis, como no exemplo abaixo
def mostrar(a,b)
puts a
puts b
end
a = “legal”
b = “maneiro”
mostrar(a,b)
retorna :
legal
maneiro
Como em outras linguagens, podemos tambem deixar uma variavel como sendo default caso não seja passado todos argumentos, exemplo
def mostrar(a, b=”demais”)
puts a + b
end
a = “legal”
mostrar(a)
retorna :
legal demais
Se a variavel b não fosse default retornaria “ArgumentError: wrong number of arguments (1 for 2)” porque não foram passada todas variaveis necessaria pra função.
Sockets
Para sockets precisamos usar uma biblioteca ( socket ), podemos chama-la utilizando
require ’socket’
É muito simples utiliza-los, podem encontrar maiores informações em http://www.ruby-doc.org/docs/ProgrammingRuby/html/lib_network.html
Segue um exemplo abaixo de portscan feito com 20 linhas…
require ’socket’
include Socket::Constants
def Con(a)
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in(a, ARGV[0])
begin
socket.connect( sockaddr )
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT
$result = “Porta #{a} fexada”
end
if $result != “Porta #{a} fexada”
puts “Porta #{a} aberta”
else
puts $result
end
end
if ARGV.length > 2
for a in ARGV[1]..ARGV[2]
Con(a)
end
else
puts “ex : DharmaScan www.motdlabs.net 1 100″
end
Reparem que inclui tratamento de erros…
Bom é isso, estamos com muito pouco tempo e nao dá pra criar grandes artigos, porem espero que os membros consigam abrir os olhos quanto à ‘novas’ linguagens que desempenham o papel de outras muito melhor no hacking, é claro que nao somos donos da verdade, por isso recomendamos a todos estudarem ruby e tirarem suas proprias conclusoes
Até mais
Por: Dharma Crew – branco
0 comentários:
Postar um comentário