Skocz do zawartości

Problemy Z Portami- Selinux?


Jasiek_M

Rekomendowane odpowiedzi

Witam,

Mam bardzo prosty problem którego rozwiazania jednak nie moge znalezc- mianowicie przy jakiejkolwiek próbie bindowania gniazd wyskakuje komunikat "Address already in use" oczywiscie próbowalem róznych portów, ba na uczelni ten sam kod chodzi, u znajomych równiez tylko u mnie sa problemy. Podejrzewam ze SeLinux blokuje porty-co o tym myslicie? Bardzo prosze o szybka pomoc bo musze napisac pilnie pewien program na uczelnie...

 

W razie watpliwosci wrzucam przykladowy najprostszy kod który zdazylem napisac na uczelni jeszcze:

Klient:

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/types.h>
#include <arpa/inet.h>

int socketFd;
struct sockaddr_in mojAddr, doKogoAddr;
char wysylkoweIp2[20] = "127.0.0.1";

int main(){
char bufor[50];
int numbytes;

socketFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(socketFd == -1){
	puts("nie mozna stworzyc gniazda");
	perror("socket: ");
	return -1;
}	

doKogoAddr.sin_family = AF_INET;
doKogoAddr.sin_port = htons(33601);	
doKogoAddr.sin_addr.s_addr = inet_addr(wysylkoweIp2);

if ( connect(socketFd, (struct sockaddr*)&doKogoAddr, sizeof(struct sockaddr)) == -1){
       	printf ("Nieudana proba polaczenia!\n");
       	perror("connect: ");
       	close(socketFd);
	return -1;
    	}
    	else printf("Polaczenie nawiazane poprawnie\n");

puts("podaj tekst do wyslania - q wychodzi");	
while(1){
	scanf("%s",bufor);		
     	numbytes = send(socketFd, bufor, 49, 0);
	if (bufor[0] == 'q') break;	
}



//	printf("wyslano %d bajtow!\n", numbytes);

close(socketFd);

return 0;
}








Serwer:

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/types.h>
#include <arpa/inet.h>

int socketFd, socketFdAccept;
struct sockaddr_in mojAddr, odKogoAddr;
char mojeIp[20] = "95.49.132.180";
char mojeIp2[20] = "127.0.0.1";
char wysylkoweIp[20] = "95.49.132.180";
char wysylkoweIp2[20] = "127.0.0.1";

int main(){
socklen_t _size;
char bufor[50];
int numbytes;

socketFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(socketFd == -1){
	puts("nie mozna stworzyc gniazda");
	perror("socket: ");
	return -1;
}	

mojAddr.sin_family = AF_INET;
mojAddr.sin_port = htons(33601);//wlasny port
//mojAddr.sin_port = 0;		//automatyczny wybor wolnego	
//mojAddr.sin_addr.s_addr = htonl(INADDR_ANY);	//sam wybiera nasz adres ip
mojAddr.sin_addr.s_addr = inet_addr(mojeIp2);	//wlasne wpisanie;

if ( (bind(socketFd, (struct sockaddr*)&mojAddr, sizeof(struct sockaddr))) == -1){
       	printf("Nie mozna skonfigurowac gniazda\n");
       	close(socketFd);
       	perror("bind: ");        	
    	}

if(listen(socketFd, SOMAXCONN) == -1) {
        printf("Nie mozna nasluchiwac\n");
       	close(socketFd);
	perror("listen: ");        	
    	}
printf("Oczekuje na polaczenie...\n");


_size = sizeof(struct sockaddr_in);
    	socketFdAccept = accept (socketFd, (struct sockaddr*)&odKogoAddr, &_size);
    	if(socketFdAccept == -1){
       	printf ("Nieudana proba polaczenia!\n");
       	close(socketFd);
     		close(socketFdAccept);
       	perror("accept: ");
	return -1;
}
    	else printf("Polaczenie nawiazane poprawnie\n");


while(1){
  	numbytes = recv(socketFdAccept, bufor, 49, 0);
	if (bufor[0] == 'q') break;
	printf("%s\n", bufor);
}






    	printf("Adres IP i port nadawcy: %s:%d\n", inet_ntoa(odKogoAddr.sin_addr),htons(odKogoAddr.sin_port));
    	//printf("Odebrana wiadomosc: %s\n",bufor);
    	close(socketFd);
    	close(socketFdAccept);





    	//printf("odebrano %d bajtow!\n", numbytes);




return 0;
}


Odnośnik do komentarza
Udostępnij na innych stronach

Po co pytasz? Nie prosciej wylaczyc na chwile SElinux i sprawdzic czy program sie uruchamia? Albo chocby przestawic na jakis czas w tryb permissive

setenforce 0

oczywiscie jako root.

Ok, a potem jak wrócic do poprzednich ustawien by komputer nie byl zbyt dlugo nie chroniony- setenforce 1?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...