PHP – Geolocalización de una IP

Este es un pequeño programita que sirve para obtener datos geográficos usando como entrada la IP del servidor

<?php
//Colocar la IP del servidor del cual queremos obtener la información geográfica
$servidor = 'X.x.x.x';
$llamada = unserialize(
file_get_contents(
'http://www.geoplugin.net/php.gp?ip=' . $servidor)
);
echo "---Localización del Servidor ".$servidor."----";
echo "
Ciudad ".$llamada['geoplugin_city'];
echo "
Región ".$llamada['geoplugin_region'];
echo "
Latitud ".$llamada['geoplugin_latitude'];
echo "
Longitud ".$llamada['geoplugin_longitude'];

?>

Dejar un comentario

Configurar un repositorio YUM

1. Montar el DVD y copiar el contenido a un directorio
mount -o loop rhel-server-5.6-x86_64-dvd.iso /mnt/disco/
cd /mnt/disco/Packages/
rpm -ivh createrepo-0.9.8-4.el6.noarch.rpm
mkdir -p /var/www/html/iso/
cp -r /mnt/disco/Packages/* /var/www/html/iso/

2. Configurar el repositorio
vim /etc/yum.repos.d/repositorio.repo
[base]
name=Red Hat Enterprise Linux $releasever - $basearch - Base
baseurl=file:///var/www/html/iso
gpgcheck=0
enabled=1

3. Crear el repomd (xml-rpm-metadata)
/var/www/html/iso
createrepo .
yum update/etc/yum.repos.d/repositorio.repo

4. En los otros servidores que están dentro de la misma subred se hace lo siguiente:
vim /etc/yum.repos.d/repositorio.repo
[base]
name=Red Hat Enterprise Linux $releasever - $basearch - Base
baseurl=http://192.168.1.1/iso
gpgcheck=0
enabled=1

Dejar un comentario

Instalación Básica de un servidor NFS

1. Deshabilitación de SELinux


[root@rhel ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

2. Deshabilitación del cortafuegos
[root@rhel ~]#chkconfig iptables off
3. Instalación de los servicios necesarios para NFS
[root@rhel ~]# yum -y install nfs-utils rpcbind
4. Habilitación de los servicios necesarios para NFS
[root@rhel ~]# chkconfig nfs on
[root@rhel ~]# chkconfig rpcbind on
[root@rhel ~]# chkconfig nfslock on

5. Configuración de NFS
[root@rhel ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

6. inicio de los servicios
[root@rhel ~]# service rpcbind start
[root@rhel ~]# service nfs start
[root@rhel ~]# service nfslock start

7. Configuración de /etc/exports
[root@rhel ~]# vim /etc/exports
/datos 192.168.1.0/24(rw,sync)

8. estado del servicio NFS
[root@rhel ~]# nfstat

Configuración en el cliente

1. Instalación de utilidades
[root@rhel ~]# yum -y install nfs-utils rpcbind
2. Inicialización de los servicios

[root@rhel ~]#  service rpcbind start
[root@rhel ~]#  service netfs start
[root@rhel ~]#  service nfslock start

3. Verificación
[root@rhel ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 53446 status
100024 1 tcp 37562 status
100021 1 udp 45403 nlockmgr
100021 3 udp 45403 nlockmgr
100021 4 udp 45403 nlockmgr
100021 1 tcp 33077 nlockmgr
100021 3 tcp 33077 nlockmgr
100021 4 tcp 33077 nlockmgr

4. Edición del archivo /etc/fstab
[root@rhel ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Aug 9 20:36:02 2011
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_rhel-lv_root / ext4 defaults 1 1
UUID=19974464-29a1-43fd-b5ba-a8ff5356bc78 /boot ext4 defaults 1 2
/dev/mapper/vg_rhel-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
192.168.1.1:/datos /datos nfs hard,nfsvers=2 0 0

5. Verificación

En el servidor
[root@rhel datos]# echo "Hola, soy el servidor , la hora es `date` , mis ips son `ip add
show| grep /24` y la hora es `date`" > hora_servidor.txt

En el cliente
[root@rhel ~]# date && cat /datos/hora_servidor.txt
jue ago 11 01:43:54 CDT 2011
Hola, soy el servidor , la hora es jue ago 11 01:43:09 CDT 2011 , mis ips son inet
192.168.1.1/24 brd 192.168.1.255 scope global eth2
inet
192.168.1.2/24 brd 192.168.1.255 scope global eth3 y la hora es jue ago 11 01:43:09 CDT 2011

Dejar un comentario

Java: Implementación de una Lista ligada


package lisligada;
import javax.swing.*;
import java.util.*;

/**
*
* @author eddy_r
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// implementacion de la lista ligada
LinkedList listaLigada = new LinkedList();
Integer menu;
do {
menu = Integer.parseInt(
JOptionPane.showInputDialog(
"Menu\n\n" +
"1 Insertar a la izquierda\n" +
"2 Insertar a la derecha\n" +
"3 Eliminar a la izquierda\n" +
"4 Eliminar a la derecha\n" +
"5 Borrar toda la lista\n" +
"6 Mostrar toda la lista\n" +
"7 Mostrar número de elementos en la lista\n"+
"8 Salir"
)
);

switch(menu){
case 1:
listaLigada.addFirst(
JOptionPane.showInputDialog("Introduce un numero para agregarlo al inicio de la lista Ligada")
);
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 2:
listaLigada.addLast(
JOptionPane.showInputDialog("Introduce un número para agregarlo al final de la lista Ligada")
);
JOptionPane.showMessageDialog(null, ""+listaLigada);
break;
case 3:
listaLigada.removeFirst();
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 4:
listaLigada.removeLast();
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 5:
listaLigada.clear();
JOptionPane.showMessageDialog(null,""+listaLigada + " Se ha vaciado la lista");
break;
case 6:
JOptionPane.showMessageDialog(null,""+listaLigada.toString()+ "");
break;
case 7:
JOptionPane.showMessageDialog(null,"La lista tiene "+listaLigada.size()+" elementos");

}
} while (menu != 8);
System.exit(0);
}

}

Dejar un comentario

Java: Calculadora

Clase Calc
package javaapplication1;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Iterator;

public class Calc extends JFrame{
//============================================================== Constantes
private static final Font FUENTE_GRANDE = new Font("monspaced", Font.PLAIN, 20);
//==== Campos
//.... Componentes referenciados durante la ejecución.
private JTextField _muestraCampo; // Muestra tanto el resultado como la entrada

//... Para representar el estado de la calculadora se usan estados
private boolean _iniciaNumero = true; // true
private String _operacionPrevia = "="; // La operacion anterior
private CalcLogic _logica = new CalcLogic(); // Calculadora interna.

//========================================================= método principal
public static void main(String[] args) {
//.... Coloca el Look and Feel al sistema que en el que estamos
try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception unused) {
; // Ignora la excepción por que no se puede hacer otra cosa.. usaremos el default
}

//.... Crea la ventana
Calc window = new Calc();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}

//============================================================== constructor
public Calc() {
//... Coloca los atributos del campo de display
_muestraCampo = new JTextField("0", 12); //0 es el valor mostrado por default, 12 el tamaño
_muestraCampo.setHorizontalAlignment(JTextField.RIGHT); //Alineación
_muestraCampo.setFont(FUENTE_GRANDE); //Colocamos la fuente

//... Crea y coloca los atributos del botón Limpia.
JButton clearButton = new JButton("Limpia");
clearButton.setFont(FUENTE_GRANDE);
//... Colocamos el listener para borrar el contenido.
clearButton.addActionListener(new ClearListener());

//... Usamos un listener para todas las teclas numericas.
ActionListener numListener = new NumListener();
//... Disposición de las teclas numericas en el grid. Genera los botones
// en un bucle donde se recorren los caracteres en una cadena

String ordenBotones = "789456123 0 ";
JPanel panelBotn = new JPanel();
panelBotn.setLayout(new GridLayout(5, 3, 2, 2));
for (int i = 0; i < ordenBotones.length(); i++) {
String teclasArriba = ordenBotones.substring(i, i+1);
JButton b = new JButton(teclasArriba);
if (teclasArriba.equals(" ")) {
//... Coloca un boton tonto en esta posición
b.setEnabled(false);
} else {
//... Coloca un boton de digitos en la interfaz
b.addActionListener(numListener);
b.setFont(FUENTE_GRANDE);
}
panelBotn.add(b);
}

//... Un ActionListener para usar para todos los botones operadores
ActionListener opListener = new OpListener();

//... Crea un panel con la disposicion para colocar los botones
//... Usa arreglos de nombres de los botones para crear los botones en
//... un ciclo
JPanel panelOperativo = new JPanel();
panelOperativo.setLayout(new GridLayout(5, 1, 2, 2));
String[] opOrder = {"+", "-", "*", "/", "="};
for (int i = 0; i < opOrder.length; i++) {
JButton b = new JButton(opOrder[i]);
b.addActionListener(opListener);
b.setFont(FUENTE_GRANDE);
panelOperativo.add(b);
}

//... Coloca el boton LImpia
JPanel clearPanel = new JPanel();
clearPanel.setLayout(new FlowLayout());
clearPanel.add(clearButton);

//... Dispone el contenido del panel top-level
JPanel contenido = new JPanel();
contenido.setLayout(new BorderLayout(5, 5));
contenido.add(_muestraCampo, BorderLayout.NORTH );
contenido.add(panelBotn , BorderLayout.CENTER);
contenido.add(panelOperativo , BorderLayout.EAST );
contenido.add(clearPanel , BorderLayout.SOUTH );

contenido.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

//... Termina la construcción del panel
this.setContentPane(contenido);
this.pack();
this.setTitle("Calculadora");
this.setResizable(false);
this.setLocationRelativeTo(null);
}//termina el contructor

//============================================================== actionClear
/** Llamado por la acción del botón limpia.*/
private void actionClear() {
_iniciaNumero = true; // Espera un número no una operación.
_muestraCampo.setText("0");
_operacionPrevia = "=";
_logica.setTotal("0");
}

//================================================= clase interna OpListener
/** Listener para todos los botones operadores. */
class OpListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// La calculadora siempre esta en uno de dos estados
// 1. Un numero debe ser ingresado - si se ingresa un operador esta mal
// 2. Un operador debe ser ingresado.
if (_iniciaNumero) { // Error: necesitamos un numero, no un operador
//... En este estado estamo esperando un numero, pero se ingreso un operador.
actionClear();
_muestraCampo.setText("ERROR - No operator");
} else {
//... Estamos esperando un operador.
_iniciaNumero = true; // Lo que viene debe ser un numero
try {
// Obtiene los valores del display,
String testoDesplegado = _muestraCampo.getText();

if (_operacionPrevia.equals("=")) {
_logica.setTotal(testoDesplegado);
} else if (_operacionPrevia.equals("+")) {
_logica.add(testoDesplegado);
} else if (_operacionPrevia.equals("-")) {
_logica.subtract(testoDesplegado);
} else if (_operacionPrevia.equals("*")) {
_logica.multiply(testoDesplegado);
} else if (_operacionPrevia.equals("/")) {
_logica.divide(testoDesplegado);
}

_muestraCampo.setText("" + _logica.getTotalString());

} catch (NumberFormatException ex) {
actionClear();
_muestraCampo.setText("Error");
}

//... coloca _operacionPrevia para el siguiente operador.
_operacionPrevia = e.getActionCommand();
}//termina endif
}//termina metodo
}//termina clase

//===================================== Clase listener interna ClearListener

class NumListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String digit = e.getActionCommand(); // Obtenemos el texto a partir del boton presionado
if (_iniciaNumero) {
//... Es el primer digito, se limpia el primer campo y se coloca el digito presionado
_muestraCampo.setText(digit);
//... ya no es el primer dígito
_iniciaNumero = false;
} else {
//... agrega este dígito al final del camplo del display
_muestraCampo.setText(_muestraCampo.getText() + digit);
}
}
}

//==================================== Listener interno, clase ClearListener
class ClearListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
actionClear();
}
}
}

Clase CalcLogic


package javaapplication1;

public class CalcLogic {
//-- variables
private int _currentTotal;

/** Constructor */
public CalcLogic(){
_currentTotal = 0;

}

public void setTotal(String n){
_currentTotal = convertToNumber(n);
}

private int convertToNumber(String n){
return Integer.parseInt(n);
}
public int add(String n){
return _currentTotal+=convertToNumber(n);
}
public void subtract(String n) {
_currentTotal -= convertToNumber(n);
}

public void multiply(String n) {
_currentTotal *= convertToNumber(n);
}

public void divide(String n) {
_currentTotal /= convertToNumber(n);
}
public String getTotalString() {
return "" + _currentTotal;
}

}

Dejar un comentario

Seguir

Get every new post delivered to your Inbox.