2010-04-18 4 views
8

J'essaye d'écrire un écouteur de Syslog et jusqu'ici si bon l'obtenant pour accepter des messages entrants par l'intermédiaire de TCP mais je veux également que l'UDP fonctionne.Obtenir un programme de socket UDP en Python pour accepter les messages d'un client Syslog?

Ceci est le code du serveur UDP que j'utilise, qui fonctionne avec une application cliente python. J'ai aussi une autre application qui fonctionne également en utilisant l'application client 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() 

En utilisant ce code je peux envoyer au serveur et lui faire afficher le code.

# 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() 

J'ai essayé le Kiwi Syslog message Générateur et Snare pour envoyer des messages syslog au serveur UDP et rien ne vient. Quelqu'un pourrait-il m'aider à comprendre?

+0

Obtenez-vous un socket.error EPERM ("permission denied") dans le serveur lors de la liaison au port 514? Si ce n'est pas le cas, alors noter que vous courez en tant que root serait utile de savoir. Si vous n'avez pas la permission refusée, est-ce qu'un autre processus écoute sur UDP/514? 'netstat -a' vous le dira sur unix. – msw

+0

Il fonctionne sur ma machine Ubuntu sur d'autres ports que 514, syslogd prenant probablement le port 514. Mais sur mon ordinateur Windows il fonctionne parfaitement. – Elvar

+0

J'ai juste essayé d'installer le serveur de Kiwi Syslog pour essayer le logiciel de client. Cela fonctionne, quand j'entre quelque chose dans l'application cliente, le serveur Kiwi le reçoit. – Elvar

Répondre

3

Trouvé le problème, le code était parfait, juste le générateur de message Kiwi Syslog que j'utilisais ne fonctionnait pas. Avec le serveur Syslog de Kiwi vient un probram impressionnant appelé Log Forwarder conçu pour transmettre toutes sortes de messages d'événements (bien au-delà de ce que l'observateur d'événements a à offrir) à un serveur syslog. Celui-ci a aussi une fonction de test ... qui fonctionne :)

Questions connexes