2015年5月13日 星期三

Simple Linux Socket example

I would like to send the UDP packet carries the syslog payload.

#include the below head file
sys/socket.h
linux/sockios.h
fcntl.h
netdb.h
netinet/ether.h
netpacket/packet.h
net/if.h



int main(int argc, char* argv[])
{
struct sockaddr_in ska_in;
int sket, i, slen=sizeof(si_other), length=0;
     
        if ( (sket=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
   printf("Can't creat socket\n");
   return 1;
}

        memset((char *) &ska_in, 0, sizeof(ska_in));
ska_in.sin_family = AF_INET;
ska_in.sin_port = htons(514);//syslog port 514
     
        if (inet_aton("192.168.1.1", &ska_in.sin_addr) == 0){
    printf("inet_aton() failed\n");
close(sket);
return 1;
}

        //construct syslog message

        if (sendto(sket, syslog_msg, length, 0 , (struct sockaddr *) &ska_in, slen)==-1){
printf("can't send syslog message\n");

return 1;
         }

    close(s);
   
         return 0
}


The prior is compute by  the Facility number (F) and the value of the Severity(S)
Pri = Fx8+S
mail.info= 2x8+6=22
fill <22> in the syslog packet i.e. 3Ch 32h 32h 3Eh

Please refer the wiki to query the facility number and the value of the Severity
Syslog Wiki


2015/9/22: Syslog over TCP

int main(int argc, char* argv[])
{
struct sockaddr_in ska_in;
int sket, i, slen=sizeof(si_other), length=0;
   
        if ( (sket=socket(AF_INET, SOCK_STREAM, 0)) == -1){
    printf("Can't creat socket\n");
    return 1;
}

        memset((char *) &ska_in, 0, sizeof(ska_in));
ska_in.sin_family = AF_INET;
ska_in.sin_port = htons(514);//syslog port 514
   
        if (inet_aton("192.168.1.1", &ska_in.sin_addr) == 0){
     printf("inet_aton() failed\n");
close(sket);
return 1;
}

        //construct syslog message

connect(sket, (struct sockaddr *) &ska_in, slen);

if (sendto(s, syslog_msg, length, 0 , (struct sockaddr *) &si_other, slen)==-1){
printf("can't send syslog message\n");
ret = 1;
break;
    }
    close(s);
 
     return 0
}

沒有留言: