1

i tried to send a udp packet in Kernel 3.10, following this question: Sending UDP packets from the Linux Kernel

The UDP packet should be sent from 192.168.56.2 to 192.168.56.1 (port 514) I checked with tcpdump on 192.168.56.2 and wireshark (+ syslog-ng on cygwin) on 192.168.56.1, but didnt see the packet(s)

Does anyone know whats wrong?

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/netpoll.h>

static struct netpoll* np = NULL;
static struct netpoll np_t;

//see https://stackoverflow.com/questions/10499865/sending-udp-packets-from-the-linux-kernel
void init_netpoll(void)
{
    np_t.name = "LRNG";
    strlcpy(np_t.dev_name, "eth0", IFNAMSIZ);
    np_t.local_ip.ip = htonl((unsigned long int)0xc0a83802); //192.168.56.2
    np_t.local_ip.in.s_addr = htonl((unsigned long int)0xc0a83802); //192.168.56.2
    np_t.remote_ip.ip = htonl((unsigned long int)0xc0a83801); //192.168.56.1
    np_t.remote_ip.in.s_addr = htonl((unsigned long int)0xc0a83801); //192.168.56.1
    np_t.ipv6 = 0;//no IPv6
    np_t.local_port = 6666;
    np_t.remote_port = 514;
    memset(np_t.remote_mac, 0xff, ETH_ALEN);
    netpoll_print_options(&np_t);
    netpoll_setup(&np_t);
    np = &np_t;
}

void clean_netpoll(void)
{
  //nothing
}

void sendUdp(const char* buf)
{
    int len = strlen(buf);
    netpoll_send_udp(np,buf,len);
}


static int __init initmod(void)
{
        printk(KERN_INFO "Hello world :)\n");

        init_netpoll();
        sendUdp("[55] testestestestestestestestest");
        sendUdp("<55>Mar 17 21:57:57 frodo sshd[701]: blub");


        //0 = module loaded
        return 0;
}

static void __exit cleanmod(void)
{
        printk(KERN_INFO "Goodbye world :(\n");
}



//Makros
module_init(initmod);
module_exit(cleanmod);
Community
  • 1
  • 1
user3075674
  • 11
  • 1
  • 3

1 Answers1

1

You should open the corresponding port for listening in the destination. you could use netcat to do this (Type this in the terminal before inserting the module)

 nc -u -l 514  // u is for udp and -l for listening on particular port

you could check the man page for more options.

goal4321
  • 121
  • 3
  • 17