Bir ip adresinde maske işlemi gerçekleştirmek için yuvaları kullanmanın doğru yolunu arıyorum. Ip adreslerini inet_pton kullanarak ikiliye dönüştürmeyi denedim ve sonra bir ikili ve (&), ancak derleyici imzasız int için sin_addr atayamam şikayet ediyor. Birisi bunu yapmak için bana doğru yöntemi yönlendirebilir mi? Bir struct in_addr
olduğunda bir unsigned long
sanki sen sa.sin_addr
atama çünküYuvalar: inet_pton() kullanarak ip adresinin ikili formunu maskeleme()
struct sockaddr_in sa;
struct sockaddr_in maska;
char str[INET_ADDRSTRLEN];
// store IP address and mask in sockaddr structs:
inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr));
inet_pton(AF_INET, "255.255.255.0", &(maska.sin_addr));
// Try to perform mask
sa.sin_addr = (unsigned long)sa.sin_addr & (unsigned long)maska.sin_addr;
// now get it back and print it
inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN);
printf("%s\n", str);
sadece bir sayıdan öte bir 'sin_addr' için çok daha fazlası var. Sa.sin_addr.s_addr = sa.sin_addr.s_addr & maska.sin_addr.s_addr; gibi bir şey aradığınıza emin olun, ancak eminim ki bunu yapmak için daha iyi bir yol var. – WhozCraig
@ WhozCraig Teşekkürler. Evet, maskeleme işlemi yapan ve maskelenen adresi döndüren bir soket işlevi arıyordum, ancak bu işlevsellik ile hiçbir şey bulamadım. Sizin yönteminiz olsa çalışıyor. –