Prise de programmation: Permission denied
Code suivant est serveur TCP programme renvoyer “BONJOUR!!” pour le client.
Quand je lance le serveur avec le port 80, bind() est retourné Permission denied
.
Port 12345 est OK.
Comment puis-je utiliser le port 80 pour ce programme serveur?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int
main(){
int sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
int sock;
char *message;
message = "HELLO !!";
sock0 = socket(AF_INET,SOCK_STREAM,0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_pton(AF_INET,"127.0.0.1",&addr,sizeof(addr));
bind(sock0,(struct sockaddr *)&addr,sizeof(addr));
perror("bind");
len = sizeof(client);
sock = accept(sock0,(struct sockaddr *)&client,&len);
perror("accept");
write(sock,message,sizeof(message));
perror("write");
close(sock);
return 0;
}
OriginalL'auteur user1345414 | 2013-12-05
Vous devez vous connecter pour publier un commentaire.
Les Ports inférieurs à 1024 sont considérés comme des "privilégiés" et ne peut être lié à autant d'utilisateurs privilégiés (lire: racine).
Rien ci-dessus et notamment 1024 est "libre d'utiliser" par n'importe qui.
OT: vous savez peut-être déjà, mais le port dans votre exemple, c'est que pour HTTP serveurs web. Rien écouter de ce port devrait parler HTTP, trop. Un simple "hello world" ne suffit pas. 😉
Bien sûr, il travaille pour la racine, qui est le plus privilégié de l'utilisateur que vous allez trouver. Cela ne veut pas dire que c'est la bonne chose à faire, cependant.
qu'est-ce que la bonne chose à faire .Avez-vous une autre solution?
Ne pas utiliser le port 80, à moins que vous l'intention d'écrire une (plus ou moins) à usage général face publique du serveur web. C'est ce que le port est réservé, et c'est pourquoi il nécessite un accès privilégié à l'utiliser car sinon il serait plus facile de créer des problèmes de sécurité.
Je n'utilise pas le port 80 pour le public. Je ne l'utilise que pour ma compréhension de la prise de la programmation dans le réseau privé.
OriginalL'auteur Linus Kleen
Seul le super-utilisateur est autorisé à se lier à des ports <= 1024. Tous les ports > 1024 peut être lié par des utilisateurs normaux.
Essayez d'exécuter votre programme en tant que root ou avec
sudo
.OriginalL'auteur akluth
vous devez exécuter votre application avec le compte de super utilisateur (root)
Exécuter votre application avec
sudo
commandeOriginalL'auteur MOHAMED