2010-04-18 3 views
8

Syslog 수신기를 쓰려고하는데 TCP를 통해 들어오는 메시지를 받아들이는데 너무 좋지만 UDP가 작동되기를 원합니다.Syslog 클라이언트에서 메시지를 받아들이 기 위해 Python에서 UDP 소켓 프로그램을 얻고 싶습니까?

이것은 내가 사용하고있는 UDP 서버 코드입니다.이 서버 코드는 파이썬 클라이언트 응용 프로그램을 사용하여 작동합니다. 또한 파이썬 클라이언트 응용 프로그램을 사용하는 다른 응용 프로그램도 있습니다.

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

이 코드를 사용하여이 코드를 사용하여 서버에 보내고 코드를 표시 할 수 있습니다.

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

나는 UDP 서버에 로그 메시지를 보낼 수있는 키위 시스템 로그 메시지 생성기와 스네어를 시도하고 아무것도 온다 없습니다. 누군가 나를 이해하도록 도와 줄 수 있을까요?

+0

포트 514에 바인딩 할 때 서버에서 socket.error EPERM ("permission denied")가 표시됩니까? 그렇지 않다면 루트로서 실행하는 것이 유용하다는 것을 알 수 있습니다. 권한이 거부되지 않은 경우 다른 프로세스가 UDP/514에서 수신 대기합니까? 'netstat -a'는 유닉스에 관해 당신에게 말할 것입니다. – msw

+0

그것은 514보다 다른 포트에서 나의 우분투 컴퓨터에서 동작 할 것이며 아마도 syslogd는 포트 514를 취할 것입니다.하지만 제 윈도우 머신에서는 완벽하게 실행됩니다. – Elvar

+0

클라이언트 소프트웨어를 시험하기 위해 Kiwi Syslog Server를 설치하려고했습니다. 그것은 작동하지, 내가 클라이언트 애플 리케이션에 뭔가를 입력하면 키위 서버가 그것을받습니다. 코드 스 니펫에 대해 감사합니다. – Elvar

답변

3

발견 된 문제는 코드가 완벽했기 때문에 Kiwi Syslog Message Generator가 wasnt 작업을 사용하고있었습니다. Kiwi Syslog Server와 함께 모든 종류의 이벤트 메시지 (이벤트 뷰어가 제공하는 것 이상으로)를 syslog 서버로 전달하도록 설계된 Log Forwarder라는 멋진 프로 롬이 제공됩니다. 그것도 하나의 테스트 기능을 가지고 있습니다 : 어떤 작품 :)

관련 문제