Warum kann ich nicht erstellen, raw-socket in Ubuntu?

Ich bin, zu lernen, wie die Arbeit mit raw-sockets in Linux. Ich bin versucht, einen socket zu erstellen wie hier:

if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) {
    perror("socket() failed");
    exit(-1);
}

Aber alles, was ich bekam nach dem Start ist:

socket() failed: Operation not permitted

Ich weiß, dass nur root kann raw-sockets erstellen, aber wenn ich es mit SUID-bit-oder sudo - der
problem ist das gleiche. Was ist falsch? Das system ist Ubuntu 11.04.

Vielleicht bin ich unnötig einschließlich Header?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>

Und ich Frage mich - warum SUID nutzlos ist?

interessant; versucht werden, die wirklich root? (und überprüft Berechtigungen werden nicht gelöscht, bevor Sie ausgeführt?)
Nein, ich habe gerade call setuid(getuid()); direkt nach dem socket-Erstellung, aber es schadet auch nicht, erreichen, dass.
wenn Sie es tun: sudo bash (oder sudo-was auch immer-shell-you-use) und Sie dann führen Sie das Programm aus...? funktioniert es?
Hmm, ja, es funktioniert auf diese Weise. Aber warum suid nutzlos ist?
Haben Sie versucht, zu tun, seteuid -- das setuid-bit für das Programm nicht festgelegt, die effektive uid und ggf. eingestellt werden müssen, um programmgesteuert.

InformationsquelleAutor Enchantner | 2011-07-26

Schreibe einen Kommentar