2010-04-18 18 views
8

Estoy tratando de escribir un oyente Syslog y hasta ahora estoy tan capacitado para que acepte mensajes entrantes a través de TCP, pero también deseo que UDP funcione.¿Cómo obtener un programa de socket UDP en Python para aceptar mensajes de un cliente Syslog?

Este es el código del servidor UDP que estoy usando, que funciona con una aplicación cliente python. También tengo otra aplicación que también funciona simplemente usando la aplicación de cliente de python.

# Server program 
# UDP VERSION 


from socket import * 

# Set the socket parameters 
host = "localhost" 
port = 514 
buf = 1024 
addr = (host,port) 

# Create socket and bind to address 
UDPSock = socket(AF_INET,SOCK_DGRAM) 
UDPSock.bind(addr) 

# Receive messages 
while 1: 
    data,addr = UDPSock.recvfrom(buf) 
    if not data: 
     print "Client has exited!" 
     break 
    else: 
     print "\nReceived message '", data,"'" 

# Close socket 
UDPSock.close() 

Usando este código puedo enviar al servidor y hacer que muestre el código.

# Client program 

from socket import * 

# Set the socket parameters 
host = "localhost" 
port = 514 
buf = 1024 
addr = (host,port) 

# Create socket 
UDPSock = socket(AF_INET,SOCK_DGRAM) 

def_msg = "===Enter message to send to server==="; 
print "\n",def_msg 

# Send messages 
while (1): 
    data = raw_input('>> ') 
    if not data: 
     break 
    else: 
     if(UDPSock.sendto(data,addr)): 
      print "Sending message '",data,"'....." 

# Close socket 
UDPSock.close() 

He intentado el registro del sistema generador de mensajes de kiwi y la caja para enviar mensajes de registro del sistema en el servidor de UDP y no aparece nada. ¿Alguien podría ayudarme a entender?

+0

¿Está recibiendo un socket.error EPERM ("permiso denegado") en el servidor cuando se vincula al puerto 514? Si no, entonces notar que está ejecutando como root sería útil saber. Si no tiene permiso denegado, ¿está escuchando algún otro proceso en UDP/514? 'netstat -a' te dirá en Unix. – msw

+0

Se ejecuta en mi máquina Ubuntu en otros puertos que no sean 514, syslogd probablemente tome el puerto 514. Pero en mi máquina con Windows funciona perfectamente. – Elvar

+0

Acabo de intentar instalar el servidor Kiwi Syslog para probar el software del cliente. Funciona, cuando ingreso algo en la aplicación cliente, el servidor Kiwi lo recibe. – Elvar

Respuesta

3

Encontré el problema, el código era perfecto, solo el Kiwi Syslog Message Generator que estaba usando no estaba funcionando. Junto con el Kiwi Syslog Server viene un asombroso probram llamado Log Forwarder diseñado para reenviar todo tipo de mensajes de eventos (mucho más allá de lo que el espectador del evento tiene para ofrecer) a un servidor syslog. Ese también tiene una característica de prueba ... que funciona :)

Cuestiones relacionadas