• Inicio
  • Blog
  • Creandolared
  • Buscar
  • Ingresar
  • Registrarse

    • Hack x Crack - Comunidad de Seguridad informática »
    • Perfil de Jen »
    • Mostrar Mensajes »
    • Temas
    ¿Quieres aprender de páginas web? Visita la comunidad Creandolared
    • Información del Perfil
      • Resumen
      • Mostrar Estadísticas
      • Mostrar Mensajes...
        • Mensajes
        • Temas
        • Adjuntos

    Mostrar Mensajes

    Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

    • Mensajes
    • Temas
    • Adjuntos

    Temas - Jen

    Páginas: [1] 2
    1
    GNU / Linux / [Aporte] Los comandos grep, head y tail.
    « en: Febrero 15, 2015, 06:38:52 pm »
    En esta ocasión explicare la función de estos tres comandos de la consola de GNU/Linux. Aunque este material puede encontrarse fácilmente en internet, espero que este post sirva como primera toma de contacto para algunos usuarios de hackxcrack y les motive a probar, investigar y seguir aprendiendo más sobre el tema.

    Índice:
       · Grep
       · Head y tail


    La gran flexibilidad de estos tres programas hace que sea imposible explicar todos los parámetros que aceptan. Así pues, os mostrare los parámetros mas usados, los <<más importantes>>. Recordad que para ver una explicación del uso de un comando y consultar los parámetros aceptados podéis utilizar:
       · man [comando]   para una explicación exhaustiva.
       · comando --help   para una lista de parámetros mas resumida.

    Grep
    Esta potente herramienta nos permite buscar palabras y texto en archivos o bien en la salida redireccionada de otro programa.

    Búsqueda en archivos
    Código: [Seleccionar]
    grep [OPTIONS] PATTERN [FILE...]
    Código: [Seleccionar]
    grep "palabra o texto a buscar" archivo/s
    Nos mostrará las líneas dónde aparecen las coincidencias. En el caso que hubiéramos buscado en mas de un archivo, nos indicara también el archivo dónde se dieron las coincidencia.

    Búsqueda en la salida redireccionada de un programa con <<pipe>> o tubería "|"
    Código: [Seleccionar]
    comando1 | grep [OPTIONS] PATTERN
    ej.
    Código: [Seleccionar]
    echo "En esta línea hay algo importante" | grep "algo importante"
    salida (resultado):
    Código: [Seleccionar]
    En esta línea hay algo importante
    Algunos parámetros importantes
    Mostrar el número de línea dónde hay la coincidencia:
    Código: [Seleccionar]
    grep -n "palabra o texto a buscar" archivo/s
    No hacer caso de las mayúsculas y minúsculas:
    Código: [Seleccionar]
    grep -i "palabra o texto a buscar" archivo/s
    Los siguientes son realmente útiles.
    Nos ponemos en el caso que tenemos un archivo del tipo (archivo completo aquí):
    Código: [Seleccionar]
    License Plate T3YUHF6
    Make: Toyota
    Color: Yellow
    Owner: Jianbo Megannem
    Height: 5'6"
    Weight: 246 lbs

    License Plate EZ21ECE
    Make: BMW
    Color: Gold
    Owner: Norbert Feldwehr
    Height: 5'3"
    Weight: 205 lbs

    License Plate CQN2TJE
    Make: Mazda
    Color: Red
    Owner: Alexandra Jokinen
    Height: 5'11"
    Weight: 227 lbs

    License Plate D875IMS
    Make: Cadillac
    Color: Orange
    Owner: Thi Kostadinov
    Height: 5'11"
    Weight: 198 lbs

    License Plate Q0SK1KP
    Make: Cadillac
    Color: Red
    Owner: Sidni Sze
    Height: 5'9"
    Weight: 199 lbs

    License Plate AJ0AHI2
    Make: Toyota
    Color: Yellow
    Owner: Matti Othman
    Height: 5'7"
    Weight: 235 lbs

    License Plate V6P2176
    Make: Volkswagen
    Color: Silver
    Owner: David Jeong
    Height: 5'4"
    Weight: 133 lbs

    License Plate 03VOMKE
    Make: Cadillac
    Color: Pink
    Owner: Daeyoong Louis
    Height: 5'10"
    Weight: 232 lbs

    ...

    Como podemos observar, tiene un formato. Cada entrada tiene exactamente 6 características del vehículo y propietario (Matrícula, Fabricante, Color, Propietario, Altura del propietario y Peso).
    Por ejemplo, nos interesa saber la información del coche con matrícula 3S2ONOK y la matrícula de los coches que están antes y después de el en el registro.

    El siguiente parámetro nos permite ver las líneas de coincidencia y X líneas antes y después:
    Código: [Seleccionar]
    grep -C 7 "3S2ONOK" vehicles.txtsalida:
    Código: [Seleccionar]
    License Plate AA2VEB8
    Make: Mazda
    Color: Silver
    Owner: Jose Paldanius
    Height: 5'11"
    Weight: 219 lbs

    License Plate 3S2ONOK
    Make: Dodge
    Color: Orange
    Owner: Dominic Matkowski
    Height: 5'1"
    Weight: 136 lbs

    License Plate B13JK7H

    Queremos saber la matrícula de los coches rojos.
    Este parámetros nos permite ver las líneas de coincidencia y X líneas anteriores:
    Código: [Seleccionar]
    grep -B 2 "Red" vehicles.txtsalida:
    Código: [Seleccionar]
    License Plate CQN2TJE
    Make: Mazda
    Color: Red
    --
    License Plate Q0SK1KP
    Make: Cadillac
    Color: Red
    --
    License Plate 1CH50MB
    Make: Audi
    Color: Red
    --
    License Plate 8WFHL48
    Make: Cadillac
    Color: Red
    --
    License Plate 9CEH5SS
    Make: Fiat
    Color: Red
    --
    License Plate MI4V97D
    Make: Jaguar
    Color: Red
    --
    License Plate ZZLQBWK
    Make: BMW
    Color: Red
    --
    ...


    Queremos saber únicamente la información de una matrícula.
    Este parámetros nos permite ver las líneas de coincidencia y X líneas posteriores:
    Código: [Seleccionar]
    grep -A 5 "3S2ONOK" vehicles.txtsalida:
    Código: [Seleccionar]
    License Plate 3S2ONOK
    Make: Dodge
    Color: Orange
    Owner: Dominic Matkowski
    Height: 5'1"
    Weight: 136 lbs

    Como en cualquier caso, podemos combinar los parámetros para obtener un resultado mas delimitado y conciso. Para ver la información de todos los conductores que midan 6' o más:
    Código: [Seleccionar]
    grep -B 4 -A 1 "Height: 6" vehicles.txtsalida:
    Código: [Seleccionar]
    License Plate A2W8QL0
    Make: Jaguar
    Color: Blue
    Owner: Daniele Nurmukhambetova
    Height: 6'2"
    Weight: 212 lbs
    --
    License Plate 3ZZWYGH
    Make: Volkswagen
    Color: Green
    Owner: Adrianti Tsirekidze
    Height: 6'0"
    Weight: 246 lbs
    --
    License Plate TL7MSWL
    Make: BMW
    Color: Blue
    Owner: Adam Moreno
    Height: 6'1"
    Weight: 163 lbs
    --
    License Plate FKXLG8O
    Make: Toyota
    Color: Blue
    Owner: Sergey Buckman
    Height: 6'2"
    Weight: 139 lbs
    --
    ...



    Los siguientes dos comandos tienen como función mostrar una parte limitada de un archivo cualquiera. Ahora me explico...

    Head
    Esta herramienta nos permite ver las primeras líneas de un/os archivo/s o bien de la salida redireccionada de otro programa. Esto es MUY útil para ver por encima la información que contiene ("make a peek" que se dice en inglés). Por ejemplo cuando el archivo no tiene un nombre muy explicativo y quieres ver que es.
    Citar
    Ah, pues es un código C++ que hice hace un tiempo. No se porque le puse afklfal.cc, iría con prisa.

    Búsqueda en archivos
    Código: [Seleccionar]
    head [OPTIONS]... [FILE]...Por defecto nos mostrará las 10 primeras líneas del archivo (si hay menos, mostrará las que haya).

    Búsqueda en la salida redireccionada de un programa con <<pipe>> o tubería "|"
    Código: [Seleccionar]
    comando1 | head [OPTIONS]Nos mostrará las 10 primeras líneas de la salida de comando1.

    Parámetros importantes (tiene muy pocos)
    Nos ponemos en el caso que tenemos un fichero de este tipo, afiliados del supermercado Costco:
    Código: [Seleccionar]
    Madonna Kim
    Bruno Tomas
    Viktoriia Glavnyk
    Sun Brink
    Austra Srebotnik
    Xiaoyi Pulai
    Kirsten Kinga
    Marharyta Khakhlova
    Kazuki Leroy
    Concepcion Rosique
    Olena Kromowidjojo
    Johannes Willis
    Arianna Lauro
    Daria Palermo
    Yuliya Davies
    Agnes Vasina
    Jonathan Endrekson
    Risto Bertrand
    Sung Szucs
    Diana Fedoryshyn
    Albert Barthel
    Emilio Williams
    Nathalie Ionescu
    Connor Touzaint
    Yukie Louis
    Margaret Gao
    Aya Rakoczy
    Yin Toma
    Camilla Terpstra
    Olivia Valencia
    Casey Hardy
    Thomas Cronje
    Lauren Pereira
    Nuria Saenko
    Luke Ruh
    Yifang Khudzenka
    Fernando Bishop
    Min-Jae Piedade
    Suyeon Woo
    Florent Aleh
    Birhan Evans
    Ahreum Sum
    Julia Peng
    Thilo Figueroa
    Beth Mazuryk
    Amel Kim
    Nicolas Rapinoe
    Irina Tukiet
    Hamish Drabenia
    Francena Savchenko
    Muhamad Sanders
    Tom Ptak
    Annamaria Crothers
    Aleksandr Kim
    Andrei Pognon
    Ade Blouin
    Olena Abysova
    Luigi Sofyan
    Maiko Osborne
    Suzanne Warburton
    Wenwen Pitchford
    Kunzang Kim
    Sergey Zurrer
    Petr Schiavone
    Petar Urantungalag
    Shuang Salukvadze
    Przemyslaw Liang
    Derrick Jackson
    Vincent Girke
    Collis Freimuth
    Ikhtiyor Goss
    Cindy Narcisse
    Almensh Tuara
    James Seferovic
    Alexander Kurbanov
    Matthew Jamal
    Tatyana Wang
    Alyssa Fouhy
    Gustav Grabuste
    Luka Begu
    Iosif Wang
    Takayuki Dundar
    Nadzeya Allegrini
    Martin Stankovic
    Massimo Harradine
    Jing Sprunger
    Brady Mendonca
    Jessica Ochoa
    Junggeu Firova
    Yun-Hee Karagoz
    Chia-En Miley
    Panagiotis Mucheru
    Jarrod Kovalenko
    Daniel Lim
    David Rossi
    Adnane Kim
    Hedvig Crain
    Alice Tukhtachev
    Ryosuke Ciglar
    Giovani Alflaij
    Paula Pieters
    Irina Song
    Tina Imboden
    Laura Ng
    Donggeun Guion-Firmin
    Jan Sandig
    Sviatlana Yin
    Kanako Zhang
    Virginie Medina
    Carolina Macias
    Yuri Florence
    Ryan Paulo
    Dariya Kalentieva
    Zi Stanning
    Ivan Nakai
    Mary Wallace
    Svetlana Dieke
    Aleksandr Rutherford
    Matthew Juaneda
    Daniel Liu
    Jessica Steger
    Anna Scozzoli
    Luka Mutai
    Arantxa Kalnins
    Mindaugas Saleh
    Shara Green
    Elia Mota
    Jurgen Granollers
    Abraham Benitez
    Tatjana Henriquez
    Vanesa Hitchon
    Karen Okruashvili
    Klara Gubarev
    Carli Kajuga
    Sung Dyadchuk
    Ionut Kalovics
    Andrey Si
    Charlotte Taylor
    Shane Lauric
    Suyoung Rodrigues
    Sajjad Oriwol
    Oliver Parti
    Bianca Sekyrova
    Juri-Mikk Vecchi
    Bubmin Saenz
    Liam Ahmed
    Galen Kirpulyanskyy
    Liangliang Miller
    Ivana Lee
    Mihai Correa
    Carl Osipova
    Maria Figlioli
    Filipp Nguyen
    Sabina Williams
    Samantha Hantuchova
    Darryl Strebel
    Wei Zilberman
    Ravil Mokoena
    Joanna Dlamini
    Tervel Rojas
    Hector Costagrande
    Yue Birmingham
    Abdelhamid Cabrera
    Gabor Hochstrasser
    Yomara Setiadi
    Matteo Gordeeva
    Courtney Yankey
    Hang Slimane
    Ferenc Savsek
    Cedric Subotic
    Yun Dula
    Laurence Intanon
    Austra Xu
    Daniela Schaer
    Magdalena Kondratyeva
    Eric Rouba
    Nick O'farrell
    Amina Arusaar
    Karl-Martin Adlington
    Desiree Kavcic
    Maureen Makanza
    Aya Levina
    Saziye Phelps
    Yerkebulan Mitchell
    Betsey Cunha
    Ian Wilson
    Reyare Mogushkov
    Westley Febrianti
    Hiram Blume
    Natalia Manaudou
    Josefin Ifadidou
    Sven Contreras
    Nikolay Pota
    David Rahimi
    Casey Lei
    Szymon Silva
    Geoffrey Plotyczer
    Diego Smith
    Linda Rotaru
    Mona Parsonage
    Harry Velikaya
    Aniko Logan
    Harinelina Iakovenko
    Michelle Gueye
    Stepan Gallantree
    Carl Bekri
    Jessica Hemthon
    Selim Karagoz
    Piotr Rabente
    Prince Zyl
    Abiodun Horvath
    Anna Jaskolka
    Erwan Putra
    Josefin Lamdassem
    Tianyi Boughanmi
    Mechiel Socha
    Mie Hall
    Linyin Manojlovic
    Harry Belete
    Jur Gebremeskel
    Princesa Firdasari
    Yuichi Burgh
    Alexandre Smedins
    Sergej Ayalew
    Satoko Wang
    Romulo Simanovich
    Jonelle Ayim
    Karsten Thompson
    Yumeka Guo
    Birhan Ryan
    Xiang Diaz
    Lina SCHIMAK
    Florian Schrade
    Mateusz Yi
    Olivera Lehtinen
    Haley Deetlefs
    Yasser Pannecoucke
    Muhamad Sadeiko
    Hannah Knioua
    Jonas James
    Carl Nielsen
    Alexandra Jokinen
    Nicola Belikova
    Esther Robinson
    Wei Shi
    Amel Ochoa
    Jennifer Athanasiadis
    Nathan Freixa
    Guojie Timofeyeva
    Beatriz Smock
    Mohamed Fanchette
    Gemma Malki
    Marina Bidaryan
    Oleg Dyadchuk
    Wai Schoeman
    Niverka Junior
    Yumeka Cipressi
    Alexey Hammadi
    Nastassia Croenen
    Yi Gretchichnikova
    Bianca Coleman
    Stephanie Kieng
    Marianne Quioto
    Kaori Silva
    Rustam Bashore-Smedley
    Kien Mottram
    Esref Pikkarainen
    Nanne Maree
    Jan Berg
    Kay Tramer
    Derek Aguiar
    Ediz Gorlero
    Khetag Wagner
    Cesar Qin
    Mathias Longosiwa
    Abouhalima Uptagrafft
    Aaron Santos
    Grzegorz Zarkua
    Edinson Rodrigues
    Johanna Khinchegashvili
    Aaron Cho
    Jakub Gondos
    Becchara Pareja
    Anna Savinova
    Christina Tavares
    Tarek Takahira
    Roderick Atari
    Igor Kasa
    Sarolta Bakare
    Anaso Booth
    Anzor Gu
    Silvia Travica
    Nicolas Gyurov
    Jose Hernandez
    Remy Barac
    Frithjof Urtans
    Robyn Mortelette
    Mehdi Kovalenko
    Christina Illarramendi
    Steven Slater
    Larissa Cortes
    Martin Amb
    Justine Lavrentyev
    Kerron Bracciali
    Jesus Barrett
    Elena Frolov
    Jaime Ramadan
    Leford Lapin
    Martin Vanegas
    Caroline Denayer
    Adam Houssaye
    Kerri Paszek
    Luis Goss
    Craig Furey
    Jack Lochte
    Bruno Oliver
    Mads Whitty
    Marie Kim
    El Toth
    Diego Michan
    Julia Hirano
    Inaki Murphy
    Kristina Munro
    Alexandre Schwarz
    Aleks Pirghie
    Bumyoung Soares
    Vitali Oliver
    Nigel Hejmej
    Pascal Davaasukh
    Matthias Mugula
    Yulia Hostetler
    Hilder Zairov
    George Liu
    Suzaan Dawkins
    Dana Hassnaoui
    Haris Sinclair
    Marie Unsworth
    Evi Junkrajang
    Robert Knowles
    Yevgeniy Gushchina
    Limei Ioannou
    Toshiyuki Bernier
    Philip Hilario
    Elena Mekic
    Haakan Okrame
    Emanuel Hanany
    Mario Rivas
    Alex Moroz
    Igor Dumoulin
    Kosta Buff
    Sarah Markussen
    Luis Azcarraga
    Lauren KORSIZ
    Timothy Goffin
    Taimuraz Melis
    Bogdan Michel
    Sara Friis
    Sergey Almeida
    Manabu Medvedev
    Un Avramova
    Mink Clos
    Annemiek Arikan
    Mahe Ivashko
    Marta Kiala
    Savannah Kleen
    Vanessa Sato
    Gilles Zhang
    Kay Kouassi
    Andrei Kawamae
    Apti Mccormack
    Carole Adams
    Benjamin Bussaglia
    Daniela Gavnholt
    Boris Tunnicliffe
    Martina Voronov
    Kiril Larsson
    Isiah Lacuna
    Sanya Dreesens
    Jennifer Mogushkov
    Joel Rogowska
    Andrew Gallardo
    Alexander Lohvynenko
    Jefferson He
    Donald Aleksic
    Suji Gallantree
    Christa Kvitova
    Nikola Zevina
    Nuno Rajabi
    Giulia Schwanitz
    Lee Veneva-Mateeva
    Kemal Dinda
    Marie-Louise Hosking
    James Brooks
    Lei Estrada
    Igor Turner
    Giedrius Calja
    Jonathan Isaksen
    Marion Reynolds
    Heykel Liang
    Moses Sihame
    Ludivine Chetcuti
    Alexander Welten
    Kellie Leon
    Daniela Schleu
    Alberto Fiakaifonu
    Simon Truyens
    Miho Franco
    Elizabeth Smith
    Yuliya Sokolov
    Jason Vargas
    David Perez
    Claudia Eshuis
    Georgios Petrov
    Angelique Raden
    Dorothee Garderen
    Edward Tatham
    Eric Rolin
    Melody Larose
    Alfredo Polyanskiy
    Masako Kuczko
    Matthew Chakhnashvili
    Tobin Niwa
    Ana Lowe
    Andrew Meliz
    Mink Hernandez
    Mario Boninfante
    Sook-Ja Lindback
    Guor Rodhe
    Stephanie Sofyan
    Nikola Kadhi
    Kyle Koala
    Christophe Tanii
    Birsel Siladi
    Phillipp Absalon
    Triyaningsih Choe
    Lidia Glover
    Yun Luo
    Daniel Basalaj
    Ahmed Kurthy
    Seiichiro Almagro
    Jennifer Al-Azzawi
    Charlotte Grechishnikova
    Diletta Tindall
    Gilles Jang
    Thomas Doder
    Sergio Calzada
    Alexander Hansen
    Kristina Liess
    Sanne Kuo
    Michael Hammarstrom
    Andrey Kim
    Martyna Baraka
    Andrija Peker
    Blair Wei
    Zara Luvsanlundeg
    Arnaldo Abella
    Francisco Feldwehr
    Gulsah Makarova
    Dani Loukas
    Viktoriia Mathlouthi
    Luis Petkovic
    Nicholas Morgan
    Luis Lundgren
    Chong Massialas
    Patricia Scott
    Robyn Levy
    Dauren Smulders
    Ion Hutarovich
    Burry Rodriguez
    Iain Kossayev
    Yimeng Amaris
    Carl Chapman
    Pedro Harper
    Iker Franek
    Yee Jiang
    Alexandra Solja
    Sadio Chouiref
    Nicholas Kudryashov
    Moon Caille
    Roland Deak-Bardos
    Li Watanabe
    Ineta Whalan
    Lidija Usovich
    Max Lee
    Pierre-Alexis Valiyev
    Blessing Alamirew
    Kurt Tran-Swensen
    Fernanda Purchase
    Leonardo Mitic
    Kum Musil
    Marie-Andree Dalby
    Hawley Hunter
    Helen Beaubien
    Gil Warfe
    Andrei Randall
    Ivan Versluis
    Trevor Pirozhkov
    Stevy Fernandez
    Ahmed Borodavko
    Angel Cash
    Cleopatra Ryder
    Agnieszka Baker
    Julia Dovgodko
    Lauren Johnson
    Ning Knowles
    Gabriele Barcelo
    Courtney Bischof
    Enzo Balciunas
    Gideon Kowal
    Marie-Louise Gunaydin
    Alex Gregory
    Ayouba Carrington
    Fabio Simic
    Edward Kadelbach
    Franck Gemo
    Michael Sjostrand
    Rizlen Mrisho
    Ann-Marie Moffatt
    Jangy Scott-Arruda
    Zoltan Puusta
    Nelly Rumjancevs
    Bolade Rubino
    Zargo Dehesa
    Kevin Jeptoo
    Kissya Choden
    Daniel Herman
    Marcel Redhead
    Maryam Denanyoh
    Danylo Bond-Williams
    Nils Jurkevics
    Blaza Frolov
    Francisco Sinia
    Aniko Blume
    Alexis Mallet
    Georgios Gigli
    Luciano Ahmad
    Paul Kitamoto
    Vincenzo Kermani
    Chia Hilario
    Rosie Fredricson
    Melissa Sychra
    Doyler Protsenko
    Shiho Berkel
    Lisa Peralta
    Yann Simionescu
    Winder Jongjit
    Mouni Malaquias
    Wilson Duong
    Ola Almeida
    Natalia Sombroek
    Johannes Berna
    Zhizhi Kehoe
    Genzebe Green
    Christopher Wilson
    Luol Mooren
    Egidio Kim
    Maximiliano Han
    Virginie Zhang
    Anthony Kudlicka
    Jennifer Marco
    Erick Fedoriva
    Svetlana Wang
    Angelica Lopez
    Christos Jo
    Simon Stepanyuk
    Kasper Addy
    Stefanie Thi
    Layne Smith
    Kimberley Colhado
    Eloise Balooshi
    Yanfei Nono
    Takahiro Wagner
    Radoslav Susanu
    Bingtian Jing
    Duane Skvortsov
    Vincent Lawrence
    Victoria Mohamed
    Peter Lasko
    Dmytro Xie
    Neymar Kaczor
    Alysia Tirode
    Kelsey Lopez
    Cristian Bennett
    Tom Mcculloch
    Shao Watt
    Grzegorz Kohistani
    Duhaeng Agren
    Rozle Johansson
    Jessica Bolat
    Anastasiya Jebbour
    Charlotte Kachalova
    Timea Nus
    Emma Pink
    Donatien Otoshi
    Lea Mohsen
    Maik Bobadilla
    Ever Levins
    Damian Kim
    Lisa Poistogova
    Chia-Jung Sanneh
    Marestella Viljoen
    Mei Stettinius
    Selim Cook
    Beth Andrade
    Jan Steiner
    Taine Clarke
    Takao Vazquez
    Renee Na
    Teodor Wilson
    Alexey Simonet
    Bishindee Wilcox
    Natthanan Nakagawa
    Neil Priddy
    Slobodan Meliakh
    Julia Jeon
    Feliciano Tecau
    Shiho Brens
    Andrew Ekame
    Laura Khokhlova
    Nicolas Wells
    James Haghi
    Seungmin Trott
    Amy Jo
    Molly Cerdeira
    Jordis Botia
    Lesley Bithell
    Shu-Ching Ribas
    Diego Dahlkvist
    Georgi Hernandez
    Meredith Yu
    Philipine Hansen
    Rafael Vezzali
    Tatsuhiro Thompson
    Karlo Romagnolo
    Fabiana Kasyanov
    Nikola Alameri
    Tarek Luis
    Maialen Uriarte
    Britany Charlos
    Reza Hoff
    Kaori Lester
    Amaka Mathlouthi
    Marcin Canitez
    Dmitriy Bartman
    Mohamed Koo
    Roc Bari
    Paolo Sirikaew
    Kelsey Grumier
    Yulan Mohaupt
    Norma Aanholt
    Luciano Telde
    Eelco Berings
    Agnieszka Skhirtladze
    Rafaela Moudatir
    Arlene Navarro
    Anouar Worrack
    Ned Vieyra
    Camille Gao
    Ibragim Cerutti
    Kim Smith
    Andre Horvat-Panda
    Hakim Svennerstal
    Zachary Schelin
    Nyam-Ochir Yauhleuskaya
    Selim Tregaro
    Julien Buchanan
    Astrida Roche
    Casey Mccabe
    Elea Li
    Andrei Yazdani
    Katarzyna Calabrese
    Marko Baltacha
    Mechiel Maric
    Amy Zaiser
    Iuliia Oatley
    Danila Henao
    Victoria Abarhoun
    Denes Venier
    Dave Scott
    Tjipekapora Kurjo
    Ryan Fogg
    Mikaela Iwao
    Wanida Barjaktarovic
    Juan Lovric
    Kelly Drexler
    Jose Liu
    Rand Fanchette
    Tyler Borisenko
    Ramon Kirkham
    Concepcion Ovtcharov
    Marton Coetzee
    Ryan Pota
    Bryan Razarenova
    Alexandru Govers
    Giulia Freden
    Yassine Bazzoni
    Akeem Ngake
    Robert Marennikova
    Oscar Sanchez
    Louise Karimov
    Yun Milevicius
    Cesar Joppich
    Magalie Allen
    Richard Hybois
    Jehue Zolnerovics
    Richard Scarantino
    Fabienne Bouw
    Madara Smith
    Daria Schmid
    Susana Neymour
    Daniela O'malley
    Tobias Cardoso
    Marcel Mathewson
    Serhiy Bisharat
    Nicholas Rosa
    Barbara Hutten
    Pajtim Ahmadov
    Donglun Borlee
    Jieun Sukhorukov
    Mariaesthela O'connor
    Christian Zambrano
    Rasmus Quinchara
    Betkili Khaibulaev
    Thomas Song
    Oliba Bosetti
    Fabiola Alfaro
    Levan Ingram
    Matthias Mendes
    Raul Hoshina
    Kate Florence
    Anis Boninfante
    Tsagaanbaatar Kjellberg
    Jos Oliva
    Camille Andersen
    Jan-Di Resch
    Zakia Zhurauliou
    Ned Scozzoli
    Barbara Bruno
    Trey Kirkham
    Lucie Kryvitski
    Mervyn Mcmahon
    Antje Feiteira
    Christina Vesela
    Robert Ryan
    Victor Ganeev
    Alistair Baccaille
    Hakim Gomaa
    Sergiy Markt
    Sonia Gillis
    Hesham Hunter
    Niki Klimesova
    Raissa Araya
    Dmytro Merrien
    Raghd Ikehata
    Megan Raymond
    Francois Spanovic
    Claudia Ovinou
    Hossam Franek
    Liam Maley
    Rachel Zaikov
    Oscar Palomo
    Israel Osman
    Isil Gonzalez
    Xiayan Harden
    Marlene Nicholson
    Shuai Huang
    Jessica Basalaj
    El Rooney
    Khamis Angeloni
    Julieta Pars
    Roberto Tsakonas
    Maxime Paulo
    Fredy Ezzine
    Claudia Metu
    Byungchul Bouqantar
    Alexandra Sanchez
    Hao Janovic
    Xiaoxu Cardoso
    Jaime Sonsirma
    Noemi Chacha
    Guilherme Zhang
    Milan Ekberg
    Natthanan Glaetzer
    Peng Perez
    Pavlo Stewart
    Dane Chintoan
    James Padilla
    Kristina Quemada
    Joel Simon
    Christos Bryant
    Jeroen Zhurauliou
    Eun Honrubia
    Jaroslaw Kalina
    Louisa Bassaw
    Yumi Buerge
    Anastasia Biannic
    Mario Vanasch
    Eddermys Djokovic
    Henna Causeur
    Patricia Zhang
    Lucy Maguire
    Laetitia Yamauchi
    Vered Barrondo
    Enzo O'shea
    Kirsty Urtans
    Nikolay Jaramillo
    Casey Cullen
    Ciaran Han
    Krystian Kean
    Ligia Czakova
    Beth Moorwood
    Ali Jallouz
    Gwang-Hyeon Mears
    Lyndsie Norden
    Ons Buljubasic
    Mervyn O'malley
    Lene Zargari
    Ivan Grandon
    Simon Franco
    Jolanta Walker
    Nicholas Hornsey
    Dilshod Thiney
    Kris White
    Jean-Christophe Kirkham
    Jimmy Wyngard
    Jitka Mottram
    Steve Mun
    Gwen Fredricson
    Bernardo Thompson
    Rokas Stosur
    Wirimai Enders
    Christian Negishi
    Yuliya Shiratori
    Petar Dominguez
    Todd Lewis-Smallwood
    Agustin Wang
    Mikalai Ali
    Vladimer Sorokina
    David Ferreira
    Nastassia Zalsky
    Alain Peguero
    Nicole Shumak
    Yang Yin
    Maro Jiang
    Agnieszka Knittel
    Sarah Kozlov
    Sonia Berens
    Oussama Payne
    Nicholas Ioneticu
    Tiago Lauric
    Kyoko Bennett
    Sander Piron
    Vanda Bentsen
    Barry Utanga
    Meagen Spellerberg
    Andre Qin
    Chantae Bouqantar
    Lauri Ihle
    Stephanie Hansen
    Yuliya Cuesta
    Wissem Davies
    Spas Dawson
    Yi Mansouri
    Hoi Martina
    Cornel Bernotas
    Dragan Murphy
    Aretha Marino
    Branden Cavela
    Ayman Suursild
    Pape Kantarci
    Meghan Lidberg
    Alice Liu
    Renal Boskovic
    Ranohon Montano
    Thierry Ortiz
    Giacomo Koski
    Olga Puga
    Teresa Andrewartha
    Darae Elsayed
    Denys Hasannen
    Tilak Raden
    Thomas Shen
    Marisa Silva
    Lauryn Bae
    Andreas Quiyuch
    Ni Robinson-Baker
    Ian Rhodes
    Benjamin Parker
    Arnaud Feck
    Koji Miyama
    Maria Clapcich
    Vasilisa Jeong
    Patrick Whalen
    Anky Cheikh
    Luis Gascon
    Yana Takatani
    Aaron Purevjargal
    Eelco Aramburu
    Marius-Vasile Sidi
    Cornel Ding
    Martin Sireau
    Audrey Silva
    Mi-Gyong Chen
    Omar Canitez
    Tim Bernado
    Angelica Meylink
    Shuai Muttai
    Sergey Richard
    Kasper Schops
    Janne Tallent
    Dorde Leboucher
    Jacobine Fowles
    Chun Yamaleu
    Olena Turei
    Alexander Jiang
    Evagelos Felix
    Aldo Nicolas
    Ibrahim Seoud
    Viktoriia Madico
    Ricardo Kim
    Jessica Richter
    Rebecca Janic
    Romana Wu
    Keri-anne KORSIZ
    Woroud Baroukh
    Sebastian Drame
    Khetag Marinova
    Omar Jon
    Samantha Ahamada
    Jinhui Rouhou
    Jessica Mcgivern
    Lulu Maguire
    George Santonja
    Chie Aigner
    Eve Pessoa
    Mattias Kovtunovskaia
    Alexandr Liu
    Mannad Khitraya
    Renata Rasic
    Nour Lobacevske
    Leyla Szabo
    Hotaru Jones
    Caster Gong
    Jordan Panizzon
    Igor Fredricson
    Jianfei Erokhin
    Francis Thiele
    Elia Gittens
    Laetitia Cornelissen
    Haojie Fernandez
    Kevin Giovannoni
    Jinzhe Aubameyang
    Radoslaw Robles
    Sarra Moradi
    Laura Fahden
    Marcos Laukkanen
    Hugues Kim
    Tomasz Jang
    Fernanda Armstrong
    Ferenc Aydarski
    Anderson Page
    Miraildes Azcarraga
    Carl Roux
    Sandrine Lapeyre
    Siraba Davenport
    Hui Ahmed
    Andrea Lammers
    Jennifer Johnson
    Marcia Khubbieva
    Glencora Ebbesen
    Andreia Tambwe
    Aida Felix
    Kate Mata
    Volha Otsuka
    Colin Vila
    Hannah Rigaudo
    Hannah Jumah
    Sara Siriteanu
    Sally Fuamatu
    Nestor Seric
    Ekaterina Hernandez
    Laura Neben
    Drew Aly
    Ying Marinova
    Narumi Hoketsu
    Marco Stanley
    Emiliano Wenk
    Wenwen Samilidis
    Julen Fogarty
    Valerii Volikakis
    Majda Liu
    Maksim Acuff
    Lina Cabral
    Xiangrong Palmer
    Zohra Bryant
    Kevin Okori
    Katerina Wang
    Robin Kazakevics
    Rene Antosova
    Katherine Luca
    Ruoqi Nowak
    Marjo Al-Mashhadani
    Ashley Johansson
    Sacha Qin
    Peter Howieson
    Emanuele Siegelaar
    Benjamin Bilici
    Lidia Bird
    Elodie Arcioni
    David Moutton
    Helalia Mclean
    Maria Smid
    Arnaldo Shulika
    Vasilij Blouin
    Miryam Dunnes
    Nenad Nikic
    Brigitte Pishchalnikov
    Vicky Florez
    Aleksei Ruiz
    Yuliya Furukawa
    Jiyeon Iakovakis
    Tyson Knezevic
    Sanah Ye
    David Schuh
    Emma Frica
    Samir Panguana
    Toea Liptak
    Marcin Pechanova
    Justinas Wote
    Maximilian James
    Habibollah Smith
    Kate Pink
    Michael Vasco
    Lei Lee
    Marcel Petersen
    Dong-Young Garcia
    Nick Schodowski
    Momotaro Khmyrova
    Thais Mihalache
    Viktor Lamdassem
    Dorian Sankuru
    Jeroen Torstensson
    Sara Knowles
    Melissa Brguljan
    Uladzimir Bertrand
    Ronald Kim
    Daniella Subschinski
    Jonas Calvert
    Soumiya Hykes
    Ahmed Korzeniowski
    Evgeni Chen
    Bashir Liu
    Stijn Choi
    Alessio Ariza
    Artem Figere
    Maiko Zhang
    Zorana Kucukbay
    Thomas Gustafsson
    Gia Yoon
    Euan Gunnarsson
    Jean Svechnikova
    Alicia Fuentes
    Gabriela Weir
    Xavier Cox
    Hanna Wraae
    Yahima Gojkovic
    Shinichi Hahn
    Kay Coster
    Lucie Kmetova
    Ahmed Harrison
    Elena Rezende
    Vladimir Muda
    Hongyan Collins
    Taufik Toksoy
    Zhongrong Xu
    Simona Milthaler
    Allan Melgaard
    On Schops
    Norbert Nicolas
    Rachel Kostelecky
    Jan-Di Kazlou
    Donatien Lotfi
    Maksim Culley
    Luana Li
    Alexandr Cao
    Stefanos Lennon-Ford
    Yifang Jang
    Nenad Blerk
    Dong-Young Kim
    Karen Brandl
    Bartlomiej Marroquin
    Boniface Eichfeld
    Tonci Schneider
    Hyelim Villaplana
    Hedvig Diaconu
    Dmytro Song
    Kate Bourihane
    Abdihakem Jongjit
    Husayn Robinson
    Natalia Child
    Gia Mogawane
    Thi Kostadinov
    Dieter Kocaturk
    Natalia Beresnyeva
    Reika Moretti
    Brenda Hsu
    Shehab Makhloufi
    Veronique Caianiello
    Sarra Larsen
    Adam Ruday
    Dragos Han
    Jaime Zhang
    Laura Wu
    Dana Potent
    Csaba Martin
    Mayara Trinquier
    Carlos Liu
    Paula Pamg
    Georgios Antal
    Aline Peters
    Jacqueline Sauvage
    Darcy Zouari
    Perri Staut
    Brittany Terraza
    Dmitrii Cureton
    Judith Plotyczer
    Bostjan Kasold
    Anna Choi
    Corinna Guzzetti
    Simona Alayza
    Lee Farris
    Nguyen Ozolina-Kovala
    Damien Williams
    Jozef Nolan
    Martino Wallace
    Samantha Lin
    Janko Ochoa
    Trevor Peno
    Cristian Dobek
    Arseniy Pais
    Kevin Zavala
    Cy Malzahn
    Christopher Andersen
    Alexey Guloien
    Adnan Brendel
    Clayton Schoettler
    Job Cole
    Jorge Lambert
    Jiawei Koedooder
    Kelis Wurzel
    Hui Akutsu
    Mikhail Vlcek
    Almensh Zbogar
    Chi Kim
    Christopher Shubenkov
    Lauren Burch
    Marquise Mohaupt
    Daniel Marburg
    Noor Borzakovskiy
    Olena Kyu
    Vignir Charter
    Aoife Pyrek
    Jennifer Kim
    Sajjad Ulrich
    Michael Tayama
    Tatyana Flognman
    Nataliya Gherman
    Russell Verdasco
    Mirco Pavoni
    Yage Bruno
    Sarah Benie
    Marina Neuenschwander
    Ziwei Braas
    Diego Shing
    Yury Mensah-Bonsu
    Simas Takahashi
    Mariko Shimamoto
    Tarik Atangana
    Nagisa Leroy
    Kame Boussoughou
    Bruno Kiryienka
    Todd Istomin
    Josefin QUINTERO
    Pavlos Nicolas
    Eunice Zairov
    Nada Domingos
    Christopher Stafford
    James Rosic
    Lei Vican
    Thiago Bruno
    Ruslan Filho
    Radoslaw Sze
    Silja Abdusalomov
    Louise Marton
    Tomas Rodriguez
    Adenizia Kim
    Tomasz Lanzone
    Katharina Bartonickova
    Anne-Sophie Gustavsson
    Ali Wang
    Shane Choi
    Evgeniya Protsenko
    Malin Barachet
    Tamara Cafaro
    Jarrin Kolev
    Bogdan Beaubrun
    Marc Ivezic
    Anqi Samlal
    Juan Tourn
    Ardo Mastyanina
    Ivan Nimke
    Matthew Ri

    Mostrar un número X de líneas del principio del archivo:
    Código: [Seleccionar]
    head -n 15 Costco.txtsalida:
    Código: [Seleccionar]
    Madonna Kim
    Bruno Tomas
    Viktoriia Glavnyk
    Sun Brink
    Austra Srebotnik
    Xiaoyi Pulai
    Kirsten Kinga
    Marharyta Khakhlova
    Kazuki Leroy
    Concepcion Rosique
    Olena Kromowidjojo
    Johannes Willis
    Arianna Lauro
    Daria Palermo
    Yuliya Davies

    De esta manera obtenemos el nombre de los 15 primeros afiliados que aparecen en el registro.

    Si introducimos una X negativa, por ejemplo -15, el resultado varia, head imprimirá por pantalla todas la líneas del fichero menos las últimas 15.
    Código: [Seleccionar]
    head -n -15 Costco.txt
    Tail
    Si head nos permitía ver las primeras líneas de un/os fichero/s o bien de la salida redireccionada de otro programa, tail nos permite ver las últimas. Su funcionamiento es muy parecido.

    Búsqueda en archivos
    Código: [Seleccionar]
    tail [OPTION]... [FILE]...Por defecto mostrará las 10 últimas líneas del archivo.

    Búsqueda en la salida redireccionada de un programa con <<pipe>> o tubería "|"
    Código: [Seleccionar]
    comando1 | tail [OPTIONS]
    Parámetros importantes (tiene muy pocos)
    Partiendo del mismo fichero Costco.txt

    Mostrar un número X de líneas del final del archivo:
    Código: [Seleccionar]
    tail -n 22 Costco.txtsalida:
    Código: [Seleccionar]
    Ruslan Filho
    Radoslaw Sze
    Silja Abdusalomov
    Louise Marton
    Tomas Rodriguez
    Adenizia Kim
    Tomasz Lanzone
    Katharina Bartonickova
    Anne-Sophie Gustavsson
    Ali Wang
    Shane Choi
    Evgeniya Protsenko
    Malin Barachet
    Tamara Cafaro
    Jarrin Kolev
    Bogdan Beaubrun
    Marc Ivezic
    Anqi Samlal
    Juan Tourn
    Ardo Mastyanina
    Ivan Nimke
    Matthew Ri

    Obtenemo el nombre de los 22 últimos afiliados que aparecen en el registro.

    Si introducimos una X negativa, tail imprimirá por pantalla todas las líneas del archivo menos las X primeras. Es decir, nos mostrara todas las líneas a partir de la X.
    Código: [Seleccionar]
    tail -n -22 Costco.txt
    Ejemplo de uso combinado head y tail
    Gracias a los <<pipe>> o tuberías (representada con el símbolo | ), que nos autorizan a redireccionar la salida de nuestros comandos para que pueda ser aprovechada por otros, podemos combinar la funcionalidad y maximizar el potencial de estas dos últimas herramientas.

    Por ejemplo, en el supuesto que sepamos que en la línea 965 hay un nombre que nos interesa, un cliente que tiene que renovar su afiliación, podríamos utilizar este comando:
    Código: [Seleccionar]
    head -n 965 Costco.txt | tail -n 1salida:
    Código: [Seleccionar]
    Siraba Davenport
    Recibimos únicamente la información que necesitamos, ni más ni menos. Sin tener que hacer <<scroll>> hasta el infinito. Pensad que lo mismo se aplicaría para un archivo de 300.000 líneas. Invertid bien vuestro tiempo! ;)


    Spoiler
    Los archivos usados para las demostraciones fueron sacados de aquí.

    Espero que os haya gustado, haya servido para aprender nuevos conceptos y trucos o como mínimo para refrescar de antiguos. No dudéis en aportar vuestros progresos en cualquier campo y hacer un buen post.

     -- Jen


    2
    Python / [Python3/Bash] Script envía IP interna por correo electrónico 2/2.
    « en: Julio 26, 2014, 01:02:06 am »
    Ahora veremos el init script del que hemos hablado antes, que nos permitirá controlar nuestro programa con service. Para pararlo, encenderlo etc.

    INITSCRIPT
    Código: [Seleccionar]
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          ipsender
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: ipsender daemon init script
    # Description:       Enable ipsender daemon
    ### END INIT INFO
     
    # Change the next 3 lines to suit where you install your script and what you want to call it
    DIR=/usr/share/ipsender
    DAEMON=$DIR/send_mail.py
    DAEMON_NAME=ipsender
     
    # Add any command line options for your daemon here
    DAEMON_OPTS=""
     
    # This next line determines what user the script runs as.
    # Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
    DAEMON_USER=root
     
    # The process ID of the script when it runs is stored here:
    PIDFILE=/var/run/$DAEMON_NAME.pid
     
    . /lib/lsb/init-functions
     
    do_start () {
    log_daemon_msg "Starting system $DAEMON_NAME daemon"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
    log_end_msg $?
    }
    do_stop () {
    log_daemon_msg "Stopping system $DAEMON_NAME daemon"
    start-stop-daemon --stop --pidfile $PIDFILE --retry 10
    log_end_msg $?
    }
     
    case "$1" in
     
    start|stop)
    do_${1}
    ;;
     
    restart|reload|force-reload)
    do_stop
    do_start
    ;;
     
    status)
    status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
    ;;
    *)
    echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
    exit 1
    ;;
     
    esac
    exit 0

    Esta es una versión modificada para nuestro uso de la plantilla initscript de aquí.

    Este initscript hace uso de la utilidad start-stop-daemon para encender y parar el servicio, y la funciones que hay en el fichero/lib/lsb/init-functions para guardar logs.

    Es un código muy limpio y ordenado. La mayoría del los campos contenidos entres ### BEGIN INIT INFO y ### END INIT INFO los he modificado para nuestro caso.

    Explicación:
    Código: [Seleccionar]
    ### BEGIN INIT INFO
    # Provides:          ipsender                                      Nombre del daemon
    # Required-Start:    $all                                          Último en ejecutarse, tras los otros.
    # Required-Stop:     $all                                          -
    # Default-Start:     2 3 4 5                                       Se ejecuta en los runlevel  2 3 4 5
    # Default-Stop:      0 1 6                                         Se para en los runlevel  0 1 6
    # Short-Description: ipsender daemon init script
    # Description:       Enable ipsender daemon
    ### END INIT INFO

    Aunque es una parte comentada y uno puede pensar que no importa, el cierto es que estos valore se utilizan por el comando update-rc.d, que usaremos mas adelante.

    Para que el initscript funcionase con nuestro send_mail.py también tuve que cambiar:
    Código: [Seleccionar]
    DIR=/usr/share/ipsender
    DAEMON=$DIR/send_mail.py
    DAEMON_NAME=ipsender

    DAEMON_OPTS=""

    DAEMON_USER=root
    ----------------

    Colocamos el initscript en /etc/init.d/

    Lo nombramos ipsender (sin extensión) IMPORTANTE!

    A continuación lo hacemos ejecutable
    Código: [Seleccionar]
    # chmod 755 /etc/init.d/ipsender
    Para finalizar, ejecutamos este comando, que se encargara de coloar los symlink en los directorios /etc/rc?.d correspondientes:
    Código: [Seleccionar]
    # update-rc.d ipsender defaults
    Aquí tenemos el resultado,  tras encender la RaspberryPi:


    Ya estamos. Espero que haya sido de ayuda.

    BONUS TRACK: Los administradores de sistemas habitualmente utilizan scripts parecidos a send_mail.py para enviar un email alertando de alguna irregularidad en el sistema que monitorizan.
    Puedes adaptar send_mail.py para que te avise cuando ocurra alguna condición en tu sistema. En este caso era el cambio de IP, pero podría ser una intrusión o recursos de disco agotados...

    Post anterior (1/2)


    Hasta otra ~ Jen

    3
    Python / [Python3/Bash] Script envía IP interna por correo electrónico 1/2.
    « en: Julio 26, 2014, 12:47:51 am »
    Buenas a todos.

    En esta ocasión traigo este script que he echo en Python 3.x. Está pensado para una situación en la cual te encuentras en la misma red (LAN) que otro ordenador o dispositivo, y sin necesidad de tener conexión a internet, quieres acceder a él. Por ejemplo, por ssh.

    El programa corre en la maquina objetivo. Cuando se encienda el dispositivo el script mandará un email al correo electrónico deseado con la IP actual de la maquina y la hora exacta en que se mandó el mensaje. A partir de aquí, cada 15 minutos, el script irá comprobando que la IP interna no haya cambiado. En caso que si lo haya echo, manda un email con la nueva información.

    Aunque originalmente el programa lo pensé para RaspberryPi (Raspbian), se puede utilizar perfectamente con otros ordenadores con sistemas Unix-like, de hecho, hice las pruebas en un Debian 7 “Wheezy”, con el mismo resultado.

    Utiliza 3 librerías estándar de Python3 (que vienen con con el intérprete):

       - smtplib: para la conexión con el servidor SMTP y el manejo y envío de e-mails.
       - subprocess: para obtener la IP interna a través del comando “ifconfig”.
       - time: hacer pausas en el programa y obtener la hora y fecha.

    En este sentido tampoco hay ningún problema. Para ejecutar el script solo es necesario tener instalado Python 3.x.


    El Script:
    Código: [Seleccionar]
    #!/usr/bin/env python3

    # Author: Jen [[email protected]]
    # Checks the 'internal' IP of the device. If it has changed since the last
    # time it was checked, sends an email to a mail address with the new IP.
    #
    # It was originally designed to use with the RaspberryPi and be able to connect
    # to the device in LAN.

    import smtplib
    import subprocess
    import time

    def GetInternalIP(interface):
    output=subprocess.check_output(["ifconfig", interface])
    output=output.decode('utf-8')

    # Parse ifconfig output
    lines=output.split("\n")
    ipAddr=lines[1].strip().split("  ")[0].split(":")[1]
    return ipAddr


    def SendMail():
    dateAndTime=time.strftime("%A, %d %m %Y %H:%M:%S (%Z)", time.localtime())

    subject="Raspberry Pi event [{}]".format(ipAddr)
    body="Current raspberry IP is: {}\n\n\n{}".format(ipAddr, dateAndTime)

    msg="From: {0}\nTo: {1}\nSubject: {2}\n\n{3}".format(fromAddr, toAddr[0], subject, body)

    # Create SMTP Object
    smtpObj=smtplib.SMTP(smtpServer, smtpPort)

    smtpObj.ehlo() # Identify client
    smtpObj.starttls()
    smtpObj.ehlo() # Identify client under TLS

    smtpObj.login(smtpUser, smtpPass)

    smtpObj.sendmail(fromAddr, toAddr, msg)
    smtpObj.quit()
    return


    interface="wlan0"
    prevIP=None #NO TOCAR

    smtpServer="smtp.gmail.com"
    smtpPort=587
    smtpUser="[email protected]"
    smtpPass="contraseñadelcorreo"

    fromAddr="<[email protected]>"
    toAddr=["<[email protected]>"]

    # Workaround to gain time while some necessary network resources are being prepared
    time.sleep(30)

    while True:
    ipAddr=GetInternalIP(interface)
    if ipAddr != prevIP:
    SendMail()
    prevIP=ipAddr
    time.sleep(900) # 15 minutes

    Pastebin: http://pastebin.com/Ukm1NZ4Q


    Como utilizarlo:
    Para utilizar el script solo es necesario modificar el valor de las variables:
    Código: [Seleccionar]
    interface="wlan0"
    prevIP=None #NO TOCAR

    smtpServer="smtp.gmail.com"
    smtpPort=587
    smtpUser="[email protected]"
    smtpPass="contraseñadelcorreo"

    fromAddr="<[email protected]>"
    toAddr=["<[email protected]>"]

    Por defecto, cojera la ip interna de la interfaz wlan0. Puedes cambiar este valor a “eth0” si el ordenador objetivo está conectado por cable.

    A continuación, el servidor de correo a usar, por defecto el de Gmail, y la cuenta que usarás para enviar el correo.

    Como puedes ver fromAddr y toAddr coinciden, eso es porque se “automanda” el email. También puedes cambiarlo.

    Si deseas cambiar el Subject del correo enviado o el body que hay por defecto, modifica, respetando el formato:
    Código: [Seleccionar]
    def SendMail():
    [...]
    subject="Raspberry Pi event [{}]".format(ipAddr)
    body="Current raspberry IP is: {}\n\n\n{}".format(ipAddr, dateAndTime)
    [...]


    Como hacer que el script se ejecute automáticamente al arrancar la máquina.
    Como servicio (daemon) en el background.


    Para ello, son necesarios cierto conocimientos del arranque de GNU/Linux y el funcionamiento del programa init. No obstante, este no es el objetivo de este post, así que intentare explicar lo esencial para que podamos llegar a nuestro meta. El lector puede desarrollar el tema por su cuenta si lo desea.

    Básicamente, init utiliza dos espacios:

    /etc/init.d/ 
    Dónde se guardan los init script, que tienen un formato determinado que permite que el daemon en cuestión sea manipulado por el programa service. start|stop|restart

    /etc/rc?.d/  (“?” es un número del 0 al 6 que corresponde a un runlevel)
    Estos directorios contienen links simbólicos que apuntan a los script de /etc/init.d/. Cuándo el sistema entra en un runlevel determinado se ejecutan los scripts a los que apuntan los links del directorio.

    Por ejemplo:
    Cuándo se entra en runlevel 2 (normal), el programa init sigue los links que hay en /etc/rc2.d y ejecuta los script.

    BONUS: Los links dentro de /etc/rc?.d/ están nombrados siguiendo una nomenclatura especial que determina el orden en que se encienden o se apagan los daemons en ese runlevel.

    Código: [Seleccionar]
    lrwxrwxrwx 1 root root  14 jun 21 22:50 S01motd -> ../init.d/motd
    lrwxrwxrwx 1 root root  17 jun 21 23:19 S13rpcbind -> ../init.d/rpcbind
    lrwxrwxrwx 1 root root  20 jun 21 23:19 S14nfs-common -> ../init.d/nfs-common
    lrwxrwxrwx 1 root root  24 jun 21 23:19 S16binfmt-support -> ../init.d/binfmt-support
    lrwxrwxrwx 1 root root  17 jun 21 23:19 S16rsyslog -> ../init.d/rsyslog
    lrwxrwxrwx 1 root root  14 jun 21 23:19 S16sudo -> ../init.d/sudo
    lrwxrwxrwx 1 root root  20 jun 23 19:32 S16virtualbox -> ../init.d/virtualbox
    lrwxrwxrwx 1 root root  15 jun 21 23:19 S17acpid -> ../init.d/acpid
    lrwxrwxrwx 1 root root  17 jun 21 23:19 S17anacron -> ../init.d/anacron
    [...]
    Aspecto de un directorio /etc/rc?.d/

    La primera letra, S quiere decir Start (se enciende el daemon), K quiere decir Kill (termina el daemon). Los dos números siguientes determinan el orden en que se hace la operación. En este ejemplo, se enciende antes  el servicio S01motd -> ../init.d/motd que S16virtualbox -> ../init.d/virtualbox .

    A lo que íbamos, ahora con mas alegría. Para hacer que nuestro mailer se ejecute en el inicio y además lo haga como servicio:

    Colocamos el script en un lugar coherente para un script ejecutable.
    Ejecutar como root (#)
    Código: [Seleccionar]
    # mkdir /usr/share/ipsender
    Ponemos el script allí y lo nombramos send_mail.py. IMPORTANTE!

    Lo hacemos ejecutable:
    Código: [Seleccionar]
    # chmod 755 /usr/share/ipsender/send_mail.py
    En este directorio ya estamos :)

    Continuar... (2/2)

    4
    Python / [Python3] Gráfico circular con Tkinter.
    « en: Julio 08, 2014, 12:29:52 am »
    Buenas a todos.

    Publico este pequeño programa escrito en Python 3.x, que hice para practicar el dominio de la librería Tkinter (creación de interfaces gráficas).


    Aspecto del programa en GNU/Linux

    El programa toma un valor parcial y un valor total, en base a eso, calcula el tanto por ciento y muestra una representación gráfica del sistema en forma de gráfico circular. Es un programa relativamente simple –solo toma una muestra–, que siendo sinceros carece de demasiada utilidad.

    No obstante, por esto lo publico, espero que sirva para aprender a otros usuarios de la comunidad, aquellos que están interesados en Python y aquellos que aún no lo han descubierto :).

    Con ese propósito, he puesto especial atención en la claridad del código y la elección de los nombres de las variables, objetos, funciones etc.

    Código: [Seleccionar]
    #!/usr/bin/env python3

    # Author: Jen [[email protected]]
    # Creates a circular graph with the values given.

    ## Improve the CenterWindow() function so it takes into account the outermost
    ## border. *Not accurately centered now.

    from tkinter import *
    from tkinter import messagebox

    def CenterWindow(win, width, height):
        win.update_idletasks()
        x=(win.winfo_screenwidth() // 2) - (width // 2)
        y=(win.winfo_screenheight() // 2) - (height // 2)
        return [width, height, x, y]   

    def MakeGraph():
        try:
            Value=ValueObj.get()
            Total=TotalObj.get()
        except ValueError:
            InputAlert=messagebox.showwarning(title="Wrong Input", message="Enter valid numbers.")
            return

        if Total > Value:
            ValueDeg=360*(Value/Total)
            Arc=Graph.create_arc(25, 15, 305, 300, start=0, extent=ValueDeg, fill="red")
            Rest=Graph.create_arc(25, 15, 305, 300, start=ValueDeg, extent=(360-ValueDeg), fill="#DADADA")
            return
        else:
            NumbersAlert=messagebox.showwarning(title="Wrong Values", message="Total number must be greater than Value number.")
            return

    mGui=Tk()

    ValueObj=IntVar()
    TotalObj=IntVar()
    WinWidth=700
    WinHeight=400

    mGui.withdraw() # Hides the window from the screen
    mGui.geometry("{0[0]}x{0[1]}+{0[2]}+{0[3]}".format(CenterWindow(mGui, WinWidth, WinHeight)))
    mGui.deiconify() # Displays the window in the screen again
    mGui.title("Circular Graphic")

    # Canvas
    Graph=Canvas(mGui, width=330, height=315, bg="white")
    Graph.place(x=330, y=42)

    # Labels
    InfoLabel=Label(mGui, text="Information:", font="default 10 bold").place(x=70, y=80)

    ValueLabel=Label(mGui, text="Value:").place(x=73, y=120)
    TotalLabel=Label(mGui, text="Total:").place(x=77, y=150)

    VaUnit=Label(mGui, text="u").place(x=265, y=122)
    ToUnit=Label(mGui, text="u").place(x=265, y=152)

    NoteLabel=Label(mGui, text="\"u\" stands for units.", font="default 8 italic").place(x=73, y=227)

    # Entries
    ValueEntry=Entry(mGui, width=18, textvariable=ValueObj).place(x=115, y=120)
    TotalEntry=Entry(mGui, width=18, textvariable=TotalObj).place(x=115, y=150)

    # Button
    DoneButton=Button(mGui, text="Done", command=MakeGraph).place(x=160, y=180)


    mGui.mainloop()

    Pastebin link: http://pastebin.com/BTzFKDnk

    Espero que sea útil.

    Cualquier duda sobre el código, intentaré resolverla. También acepto críticas y sugerencia de mi estilo de programación.

    Hasta otra! - Jen

    5
    Off-Topic / [DEBATE] La importancia de la intimidad.
    « en: Abril 06, 2012, 05:43:41 pm »
    Bien, estuve reflexionando acerca de la importancia de la intimidad para las personas y el ser humano.
    Lo cierto es que no conseguí sacar ninguna conclusión clara. Nose si se trata de algo sicológico y vital ...

    Se que muchas personas del foro son maniáticas de la vigilancia, la intimidad y el anonimato, así que me gustaría saber vuestra opinión al respecto.

    (Y luego me sirvan a mi quizás para formarme una opinión)

    ALGUNAS PREGUNTAS INTERESANTES QUE PUEDEN AÑADIRSE A SU OPINIÓN:

    - ¿Por que es importante la intimidad para el ser humano?

    - ¿Que opinan acerca de la posición de los gobiernos y las ciudades como Londres que controlan a sus ciudadanos con el pretexto de evitar el terrorismo?

    Por favor opinen de manera clara razonable


    6
    Python / [AYUDA] Libros de lógica de la programación y python?
    « en: Marzo 13, 2012, 01:11:23 am »
    Alguien sabe el nombre de algunos libros y/o manuales acerca de la lógica de la programación y python ?

    Preferiblemente en castellano.

    De momento se de:
    -"La esencia de la logica de prorgamacion"

    Gracias de antemano.

    7
    Off-Topic / Erotísmo.
    « en: Febrero 27, 2012, 11:17:43 am »



































    FINISHER!


    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Oh dios mio!  ::) Podria estarme un buen rato comentando lo mucho que me gustan algunos de ellos  :-*

    8
    Off-Topic / Pequeña comparación google chrome - firefox
    « en: Febrero 26, 2012, 07:55:07 pm »
    Google Chrome: simple, rápido y sin demasiadas funcionalidades a parte de navegar.
    Firefox: Rápido. Desde hace tiempo casi a dejado de considerarse un navegador para considerarse toda una plataforma, debido a la gran comunidad de colaboradores que hay detrás, la multitud de opciones que da y la cantidad de complementos que hay para descargar. Ademas las ultimas versiones han incorporado una interfaz aun mas limpia parecida a la de chrome pero sin verse afectadas todas las opciones de configuración y demas que ya daba +es software libre.

    Al usuario con bajo conocimientos que solo lo usa para conectarse al fuckbook quizas le parece mejor chrome u.u, pero si hablamos de complejidad no hay comparación por dios, y eso es lo que hace a firefox un buen navegador para la gente que le gusta configurar completamente su navegador, para que le sea mas practico o para la gente que trabaja con el, su flexibilidad.

    9
    Redes (WAN, LAN, MAN, CAM, ...) / DUDA:[Scapy] Redireccionar tráfico pc a router con ParosProx
    « en: Febrero 04, 2012, 07:20:16 pm »
    Bien, en el cuaderno nuevo de scapy, el 2, echo por larry.

    Hay una práctica donde se da un MITM entre un pc y un "proxy universitario"
    Y nosotrs con ayuda de paros proxy y reglas iptables somos capaces de redireccionar el tráfico y monitorizarlo, ok eh aqui:

    Yo queria hacerlo pero envez de un proxy tengo un router, como era un proxy sabemos que el puerto que usaba era el 3128 pero ahora es un router y nose como deberia ser la configuración de ParosProxy dado que nose que puerto tendra abierto el router con ese pc...

    Alguien sabe algo? plx help!

    10
    Dudas Generales / DUDA: Que pasa cuando contratas dominio?
    « en: Enero 24, 2012, 07:28:10 pm »
    Pues eso, me gustaria saber que pasa cuando pagas un dominio, la empresa simplemente te añade a sus servidores privados de DNS?

    Lo digo porque, de ser así, es importante mirar a que empresa le contratas el dominio, con tal de tener la máxima velocidad en la resolución de este.

    Grax de antemano.

    11
    Redes (WAN, LAN, MAN, CAM, ...) / [Duda] Que es y para que sirve la direccion de red (ip de red)?
    « en: Enero 22, 2012, 01:28:24 pm »
    Se que por defecto es la primera ip de una subred, por ejemplo:

    La dirección de red de una red con un host 192.23.1.18 con mascara de subred 255.255.255.0
    dirección de red ---> 192.23.1.0

    Pero realmente nose que utilidad tiene, que función.

    El router para saber si una ip destino se encuentra en la misma red basta con que le aplique la mascara de subred a la ip origen y asi poder saber que:

    ip origen: 192.30.12.2 ---- (aplicamos mascara de subred) ---> 192.30.12.x
    ip destino: 192.30.12.24  ---- (aplicamos mascara de subred) ---> 192.30.12.x

    PERTENECEN A LA MISMA RED

    Aqui la dirección de red no es necesaria asi que no se que función tiene, a ver si alguien puede explicarme un poco como va y aclararme la duda :)


    12
    Hardware / DUDA: Velocidad de CPU y RAM no son igualables?
    « en: Enero 09, 2012, 03:51:15 am »
    Bueno pues resulta que ahora que tengo herramientas para entender los datos del hardware... Me puse a revisar la manera en que me montaron el pc (que no era lo mejor que podia haber sido) y al final acabe con esto:

    Leí que para que la cpu y la ram tuvieran el máximo rendimiento tenían que ir a la par en cuanto a velocidad (MHz) relación de 1:1 (por ejemplo un proc. a 2400MHz con un ram a 2400Mhz) ya que sino se desaprovechaban, porque o bien el proc. o bien la ram tenían que bajar su velocidad para igualar a la del otro componente y asi funcionar.

    Ok, hasta aqui bien pero luego vi que habia procesador que llegaban a los 3400MHz mientras que las memorias ddr3 como máximo alcanzan los 2400 asi que no acabo de entender...

    Esto significa que si compramos un proc. con 3400MHz no lo aprovechamos porque se tendra que rebajar hasta 2400MHz que peude tener como máximo la ram, para poder trabajar ?

    Alguien puede aclarármelo porfavor ?

    13
    Hardware / Articulo: características de un monitor, mitos.
    « en: Diciembre 13, 2011, 03:22:58 am »
    Permitan-me presentarles este articulo que me pareció excepcional, si te interesa el tema claro xD.
    Pero créanme que cuesta mucho encontrar info así de bien argumentado sobre estos aspectos de los monitores.

    Link: http://www.maximumpc.com/article/features/display_myths_shattered?page=0,0

    El articulo es demasiado largo para pegarlo aquí.

    14
    Python / [Python] Jackpot
    « en: Noviembre 29, 2011, 12:27:47 am »
    Bien, les traigo este jackpot echo en python 3 que empecé a raíz de un comentario en el foro y que al final como forma de aprender lo acabe llevando un poco más allá.



    El programa básicamente hace lo que menciono en el source, simula un "jackpot", que es un popular juego de azar pero que además cuanta con:
    Citar
    #menú principal, sistema de aciertos, "ranking" del ordenador, mejor puntuación
    # guardada, sistema de vidas y cuando falla el usuario; se le indica si el número premiado es mayor o menor. La elección
    # del número premiado es aleatoria gracias a la librería random. Las vidas son proporcionales al rango máximo para que
    # sea cual sea este haya posibilidades parecidas. Las puntuaciones se escriben cifradas en el archivo 'users.txt'.

    El programa:

    Código: [Seleccionar]
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    # Nombre del programa: 'Jackpot.py'

    # Intérprete: Python 3.x

    # Desarrollador: Jen

    # Contacta con el desarrollador en: [email protected]

    # Licencia: Creative Commons Reconocimiento-CompartirIgual 3.0 Unported. (http://creativecommons.org/licenses/by-sa/3.0/)

    # Función: El programa simula un “jackpot”. Con menú principal, sistema de aciertos, "ranking" del ordenador, mejor puntuación
    # guardada, sistema de vidas y cuando falla el usuario; se le indica si el número premiado es mayor o menor. La elección
    # del número premiado es aleatoria gracias a la librería random. Las vidas son proporcionales al rango máximo para que
    # sea cual sea este haya posibilidades parecidas. Las puntuaciones se escriben cifradas en el archivo 'users.txt'.

    # Posibles mejoras:
    # - Incorporar mejor puntuación de sesión.
    # - Consultas de la major puntuación y el "ranking" "on cloud" para evitar su modificación y poder llevar un ranking mundial.
    # - Salida de error por si se introduce un caracter especial en rango o numero escogido.
    # - Sistema de vidas con posiblidades más parecidas independientemente del rango máximo elegido.
    # - No se puede escoger un nombre que ya este en uso.

    ##############################################################################################################################


    import random
    import os

    # -------  Funciones


    def comprobar_archivo():
        if os.path.exists("users.txt"):
            existe=True
        else:
            existe=False
            open("users.txt","w")
        return existe
       

    def formar_list(existe):
        if(existe == True):
            archivo = open("users.txt","r")
            linea_users=archivo.readline()
            lista=[]
            while(linea_users != ""):
                letra_cod=3
                nombre=""
                puntuacion=""
                while(True):
                    nombre = nombre+linea_users[letra_cod]
                    if(linea_users[letra_cod+5] == "r" or linea_users[letra_cod+5] == "y" or linea_users[letra_cod+5] == "v"):
                        break
                    letra_cod=letra_cod+4
                letra_cod=letra_cod+9
                puntuacion=puntuacion+linea_users[letra_cod]
                while(True):
                    if(linea_users[letra_cod+3] == "r" or linea_users[letra_cod+3] == "y" or linea_users[letra_cod+3] == "v"):
                        letra_cod=letra_cod+2
                        puntuacion=puntuacion+linea_users[letra_cod]
                    else:
                        break
                lista = lista + [[nombre,puntuacion]]
                linea_users=archivo.readline()
            archivo.close()
        else:
            lista = []
        return lista


    def comp_MPGuardada(lista):
        mejor_Naciertos=0
        for y in lista:
           
            if(nombre_user in y):
                mejor_Naciertos=int(y[1]) 
                break
            else:
                mejor_Naciertos=0
        return mejor_Naciertos


    def escribir_archivo(lista):
        lista = lista
        presente=False
        for b in lista:
            if(nombre_user in b):
                presente=True
                break
            else:
                presente=False
                   
        if(presente == True):
            for y in lista:
                if(nombre_user in y):
                    y[1] = str(aciertos)
                   
            archivo = open("users.txt","w")
            for parejas in lista:
                for letras in parejas[0]:
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(letras)
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("ryv"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                for letra in parejas[1]:
                    archivo.write(letra)
                    archivo.write(random.choice("ryv"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
            archivo.close()
           
           
        elif(presente == False):
            archivo = open("users.txt","a")
            nombre_usercod = ""
            for nletras in nombre_user:
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(nletras)
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("ryv"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            for digitos in str(aciertos):
                archivo.write(digitos)
                archivo.write(random.choice("ryv"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
            archivo.close()
            lista = lista + [[nombre_user,str(aciertos)]]

       
    # -------  /Funciones
       

    # -------  ANCI art
    print("                                                           .............. ......\n"+
    "                                                           . ........,=?+?I$?. .\n"+
    "                                                           . .?788DOZZ8888OZ8...\n"+
    "                                                   ..........,Z88~.?$$O=..=I8...\n"+
    "                                                  ...,+?7....=O$+..=$$OI.7$$8...\n"+
    "                            ......  ....  ..    ....+D8OZ$7..~$$ZZ.~$$88.?8O8...\n"+
    "                         .. .,8$I,.......... .....,?88..:$$Z..88O+.~$ZOO. ....  \n"+
    "                         ......?8O8....,??I+......?ZO....ZZZ$......=$$OO...     \n"+
    "    ....        ..........:?Z.?88.++?$888OZZZ....=ZO8. ..+$$O......=Z$OO        \n"+
    "    .=8..         ...:.+$Z888:8O..8Z$ZO....?ZZ...I$8= ...,$ZZ~.....~$$O8        \n"+
    "    .I8I.      ......8.?O$O$.?O$...:$$O.....$Z~..7Z8......$ZZ8.....:Z$O8        \n"+
    "    .78I..... . .?Z8ZO .:$OZ?8O....:$$O.....IZD.~$ZO .. ..7$$O.. ..:$ZO8        \n"+
    "    .,8.........+O88I8..:ZO7O8. ...,$$8..  .,$O.?$ZO .....7Z$O.... ,$$OO        \n"+
    "    ..IZ$..?I$..I8$..8..:Z$?Z,......$$8~.....$8,I$ZO......I$$O. ...,$$OO        \n"+
    "    .+8O.:?Z8..=ZO..=8..~Z$$ZO......$$O:....,ZO,7ZZO..... IZ$O.....,$$OO        \n"+
    "    .I8$.?$$O..?O8......:Z8Z$Z, ....7$O+7Z?.+88.7Z$O......I$O8.....~$$ZO.       \n"+
    "    .,OZ.~$Z8..IO?......,ZOO$$O.....7$O$ZZI.?8:.:Z$O.. ...7Z8O.....~Z$ZO....    \n"+
    "    .,OO.787O.=I8...... ,$O8$$ZZ....7$O$:O8DOZ...$$Z$.. .,$$8......,$$ZO.....   \n"+
    "    ..OO.IOZO~~78.......,$O8.$ZZ....7$8O..+=.....7Z$8....I$88. ..?+IOOODD88.    \n"+
    "    ..O8.IOOZ$I$O.......,$O8.$$Z8...7$OZ..     ...$ZZ....78O.. ..D888I=, ..     \n"+
    "    ..O8.I8I$87Z8..IO...,$O8..$$Z,..7$O8..    .....OZZ..?8O$.... ...            \n"+
    "    ..O8.78I$O?$O..7$$..~ZO8..I$$O.:I$O8..    ......O8ZOD8.... ... .. ..        \n"+
    "......O8+78OIO,7O,..78..~$O8...ZZ$D87ZO8..        ....II...                     \n"+
    ". ....OO778.$O.7Z?..7Z..~$OII..+8OO?7$O8..         ....  ...                    \n"+
    "...=8$88,$8.7O~7Z8..O++$DD8O87DO8...7ZZO=,           .... .                     \n"+
    "..,OOOO8:Z8.~ZZ.Z$?$O..7~.....?...?78D88ZO.                                     \n"+
    "..IO7ZO8=Z8.,$O+.ODO:.............DD+....                                       \n"+
    "..7ODOO8?ZZ8.ZDO.....                                                           \n"+
    "..7O=~8OO8$.7Z$.. .                                                             \n"+
    "..?Z.IO,....8....                                                               \n"+
    "...OIDO.  . .                                                                   \n"+
    "........                                                                        \n"+
    "........                                                                        \n\n"+
    "--------------------------------------------------------------------------------\n\n"+
    "                'El popular juego de azar llevado a un terminal'                \n\n"+
    "--------------------------------------------------------------------------------")
    # -------  /ANCI art


    # -------  Cuerpo

    existe = comprobar_archivo()

    while(True):
        print("\n[^]MENU DE INICIO:")
        menu_inicio=input("Escribe 'exit', 'autor', 'manual', 'rank' o 'play': ")
       

        if(menu_inicio == "play"):
            nombre_user=input("Nombre de usuario: ")

            print("\n(RECUERDA: El rango empezara desde 1 y el numero que se tomara como máximo debe ser igual o mayor que 3)")
            while(True):       
                rango_max=input("*Introduce un numero que se tomara como máximo en la elección aleatoria del numero premiado: ")
                if(rango_max == ""):
                            print("\nNo puede dejar el campo en blanco.")
                elif(int(rango_max) < 3):
                      print("\nEl número que se tomara como máximo no puede ser menor de 3!\n")
                else:
                    break
                 
            num_prem = random.randint(1,int(rango_max))
            vidas=int(rango_max) // 3
            contador=vidas
            print("\nVidas:"+(contador *"<3")+"\n")
            aciertos=0
            print("Aciertos:"+str(aciertos))

            while(True):
               
                if(contador == 0): #Si el jugador se queda sin vidas
                    print("\n********** GAME OVER ***********\n")
                    while(True):       
                        rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
                        if(rango_max == "@"):
                            break
                        elif(rango_max == ""):
                            print("\nNo puede dejar el campo en blanco.")
                           
                        elif(int(rango_max) < 3):
                            print("\nEl número que se tomara como máximo no puede ser menor de 3!")
                        else:
                            break

                    if(rango_max == "@"):
                        break
                    num_prem = random.randint(1,int(rango_max))
                    vidas=int(rango_max) // 3
                    contador=vidas
                    print("\nVidas:"+(contador *"<3")+"\n")
                    aciertos=0
                    print("Aciertos:"+(str(aciertos))+"\n")

               
                valor1=input("Introduce tu número de la suerte: ") #Introduce número escogido
                escogido=int(valor1)
                if(escogido < 1 or escogido > int(rango_max)):
                    print("Pon un número dentro del rango escogido.")

               
                elif(escogido == num_prem): #Si el número escogido es el número premiado
                    print("\n!!!Enhorabuena!!! Es el ganador de un bielorussa de grandes tetas, 100.000€ por ser nuestro ganador nº1000 y un ferrari!!!\n")
                    aciertos=aciertos+1
                    print("Aciertos:"+(str(aciertos))+"\n")
                    try:
                        lista = formar_list(existe)
                       
                        mejor_Naciertos=comp_MPGuardada(lista)

                        if(aciertos > mejor_Naciertos):
                            escribir_archivo(lista)
                            mejor_Naciertos = aciertos
           
                            print("Acabas de batir tu record de aciertos!")
                            print("\n[,,,]Puntuación guardada")
                    except:
                        print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
                              "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
                              " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
                              "(El programa seguirá ejecutándose sin esta utilidad.)\n")
                   
                               
                    while(True):       
                        rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
                        if(rango_max == "@"):
                            break
                        elif(rango_max == ""):
                            print("\nNo puede dejar el campo en blanco.")

                        elif(int(rango_max) < 3):
                            print("\nEl número que se tomara como máximo no puede ser menor de 3!")
                        else:
                            break
                    if(rango_max == "@"):
                        break
                    num_prem = random.randint(1,int(rango_max))
                    vidas=int(rango_max) // 3
                    contador=vidas
                    print("\nVidas:"+(contador *"<3")+"\n")
                    print("Aciertos:"+(str(aciertos))+"\n")
                    continue
                   

                elif(escogido < num_prem): #Si el número premiado es mayor
                    print("El número que buscas es mayor. ;)")
                    contador=contador-1
                    print("\nVidas:"+(contador *"<3")+"\n")
                    print("Aciertos:"+(str(aciertos))+"\n")
                   
                elif(escogido > num_prem):#Si el número premiado es menor
                    print("¡Frena, te has pasado!")
                    contador=contador-1
                    print("\nVidas:"+(contador *"<3")+"\n")
                    print("Aciertos:"+(str(aciertos))+"\n")



        elif(menu_inicio == "rank"):
            try:
                print("\nRANKING")
                print("-------------------------------------------------------------------------------\n")
                listaOrdenada = []
                lista = formar_list(existe)
                for pares in lista:
                    listaOrdenada = listaOrdenada + [int(pares[1])]
                listaOrdenada.sort()
                listaOrdenada.reverse()
                posicion=1
                for puntuac in range(0, len(listaOrdenada)):
                    if(listaOrdenada[puntuac] == listaOrdenada[puntuac-1] and puntuac != 0):
                        continue
                    for nombres in lista:
                        if(str(listaOrdenada[puntuac]) == nombres[1]):
                            print(str(posicion)+"nº "+nombres[0]+" "+((30-len(nombres[0])) * "-")+"> "+nombres[1]+" aciertos")
                    posicion = posicion + 1
            except:
                print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
                      "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
                      " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
                      "(El programa seguirá ejecutándose sin esta utilidad.)\n")
               


        elif(menu_inicio == "autor"):
            print("\n-------------------------------------------------------------------------------")
            print("\tPrograma echo por: Jen")
            print("\tContacta con el desarrollador en: [email protected]")

            print("\nQuiero agradecer a toda la gente que hace que a dia de hoy no sea tan difícil \n"+
                  "acceder a información. A las personas que hacen sus programas y liberan el \n"+
                  "código para que otros puedan aprender con ello, como el autor de la librería que \n"+
                  "he usado para poder hacer este programa. Y a la multitud de comunidades de \n"+
                  "internet que te reciben con los brazos abiertos y ayudan en lo que pueden.")                                                                                                     
            print("-------------------------------------------------------------------------------\n")
           


        elif(menu_inicio == "manual"):
            print("\n-------------------------------------------------------------------------------")
            print("En el menú de inicio puedes escoger entre:\n")

            print("autor: para saber quién es el desarrollador del programa y como contactar con el")
            print("rank: Te mostrara el ranking del ordenador.")
            print("play: Para jugar.")
            print("exit: Para salir del programa.\n")

            print("[^] Como se juega:")
            print("1 - Introduce un nombre de usuario.")
            print("2 - Escoge un rango máximo que se utilizara para seleccionar el número premiado y\n"+
                  "determinara tu número de vidas.")
            print("3 - Introduce tu número y prueba suerte.")
            print("4 - Síguelo intentando mientras tengas vidas, el programa te ira indicando si el\n"+
                  " número premiado es mayor o menor.")
            print("5 -  Si te quedas sin vidas puedes salir del programa y probar suerte\n"+
                  "otro día o volver a empezar.\n")

            print("¡Marca tu record en tu ordenador y que nadie te gane!")
            print("-------------------------------------------------------------------------------\n")


        elif(menu_inicio == "exit"):
            break       
    # -------  /Cuerpo             

    print("Ha salido del programa.")

    El source podéis encontrarlo también aquí: http://pastebin.com/PMb0TDdg


    A la hora de escribir en el archivo no había necesidad de hacerlo de una forma diferente dependiendo si era la primera vez que jugaba (se encontrava en la lista) o no pero como sobrescribir todo el archivo con open("users.txt","w") es algo peliagudo que si sale mal puede fastidiarte el ranking, por eso hice la distinción.

    Código: [Seleccionar]
    def escribir_archivo(lista):
        lista = lista
        presente=False
        for b in lista:
            if(nombre_user in b):
                presente=True
                break
            else:
                presente=False
                   
        if(presente == True):
            for y in lista:
                if(nombre_user in y):
                    y[1] = str(aciertos)
                   
            archivo = open("users.txt","w")
            for parejas in lista:
                for letras in parejas[0]:
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                    archivo.write(letras)
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("ryv"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                for letra in parejas[1]:
                    archivo.write(letra)
                    archivo.write(random.choice("ryv"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
            archivo.close()
           
           
        elif(presente == False):
            archivo = open("users.txt","a")
            nombre_usercod = ""
            for nletras in nombre_user:
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
                archivo.write(nletras)
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("ryv"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            for digitos in str(aciertos):
                archivo.write(digitos)
                archivo.write(random.choice("ryv"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
            archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
            archivo.close()
            lista = lista + [[nombre_user,str(aciertos)]]

    Fianalmente, hos posteo pequeños BUGS, algunos mas que bugs són posibles mejoras, que no eh podido a sabido arreglar:

    - Salida de error por si se introduce un caracter especial en rango o número escogido.

    - Sistema de vidas con posiblidades más parecidas independientemente del rango máximo elegido.


    Me explico, las vidas que tendras dependeran del rango maximo introducido, de este modo:
    Código: [Seleccionar]
    vidas=int(rango_max) // 3
    Son iguales a la división de el rango máximo entre 3 (Por eso el minimo rango máximo es 3).

    Teniendo en cuenta que las vidas tienen que ser enteras, el problema esta en que si escogemos rango maximo 4 (no es divisible por 3) tenemos una vida, igual que si hubieramso escogido como rango máximo el 3 o el 5(Porque python3 redonde a la baja). Asi pues necesita otro sistema de vidas.

    Posibles mejoras:

    - No se pueda escoger un nombre que ya este en uso

    - Mejor puntuación de sesion



    Esto es todo, espero que os guste y os animo a jugarlo,(pude llevar a algún pique con los colegas una tarde que os aburráis mucho :P) también a estudiar el código y a que lo cambiéis y expreimentéis con el.

    Acepto de buen gusto, cualquier consejo, recomendación ...

    Gracias y salu2!

    15
    Hardware / Monitor panel ips :/
    « en: Noviembre 21, 2011, 09:43:54 pm »
    Si poseen un monitor con panel IPS me gustaria saber 1.que experiencias han tendido con el en juegos y peliculas, donde la accion transcurre muy rapido.

    Necesito comprar un monitor y si lo compro con tecnologia IPS me quedare tranquilo sabiendo que tendre los mejores colores que te puede dar un monitor. Pero no lo hare si este no ma vale para juegos ya que le he cogido mucho miedo al ghosting (tras la decepcion con un asus serie VE que tuve que devolver).

    2.Entonces, el problema de los IPS para juegos es debido a sus tiempos de respuesta altos o esta ligado a la tecnologia de por si ? si encontrara un panel IPS con 5ms seria igual de util que un TN de 5ms tambien no?

    Posible punto a favor de mi hipotesi: Los monitores con panel ips suelen tener una frequencia de respuesta mayor que los paneles TN.
    Pero lei que en los paneles IPS la diferenvcia entra tiempo grey to grey y de blanco a negro es parecida, asi que la frequancia de respuesta es mas constante al contrario de los TN (ej: gtg: 2ms wtb: 12ms).

    Páginas: [1] 2
    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more