Belirli bir IP sınıfı aralığı kullanarak rastgele IP adresleri oluşturmak için mevcut kodunuzu aşağıdaki gibi değiştirebilirsiniz. Örneğin, A sınıfı (1.0.0.0 - 126.255.255.255), B sınıfı (128.0.0.0 - 191.255.255.255), veya C sınıfı (192.0.0.0 - 223.255.255.255) IP adresleri oluşturmak istiyorsanız, bu aralıkları rastgele IP üretmek için kullanabilirsiniz.
Aşağıdaki örnekte C sınıfı IP adresleri (192.0.0.0 - 223.255.255.255) için rastgele IP adresleri oluşturulmuştur:
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
// IP aralıkları için makrolar
#define CLASS_A_MIN 1
#define CLASS_A_MAX 126
#define CLASS_B_MIN 128
#define CLASS_B_MAX 191
#define CLASS_C_MIN 192
#define CLASS_C_MAX 223
typedef struct {
uint8_t octet[4];
} IPAddr;
uint16_t crc16_checksum(uint16_t *buf, size_t len);
int main() {
while(1) {
IPAddr ip;
// C sınıfı IP adresi oluştur
ip.octet[0] = (rand() % (CLASS_C_MAX - CLASS_C_MIN + 1)) + CLASS_C_MIN;
ip.octet[1] = rand() % 256;
ip.octet[2] = rand() % 256;
ip.octet[3] = rand() % 256;
// ip.sourceIP'yi ip.octet ile doldur
uint8_t buf[sizeof(ip)];
bzero(buf, sizeof(buf)); // Clear buffer
memcpy(buf, &ip, sizeof(ip)); // Copy ip structure over to buffer
uint16_t ip_checksum = crc16_checksum((uint16_t*)buf, sizeof(ip)); // Perform checksum for ip structure with buffer
// Örneğin pseudoheader.saddr atama
// pseudoheader.saddr = *(uint32_t*)ip.octet;
// Debug amaçlı IP adresini yazdır
printf("Generated IP: %d.%d.%d.%d\n", ip.octet[0], ip.octet[1], ip.octet[2], ip.octet[3]);
// Burada gerekli diğer işlemler...
}
return 0;
}
// CRC16 checksum hesaplama fonksiyonu örneği
uint16_t crc16_checksum(uint16_t *buf, size_t len) {
uint16_t crc = 0xFFFF;
for (size_t i = 0; i < len; i++) {
crc ^= buf[i];
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ 0xA001;
} else {
crc = (crc >> 1);
}
}
}
return crc;
}Bu kodda, rand() fonksiyonunu kullanarak belirli bir IP sınıf aralığında rastgele IP adresleri oluşturulur. Bu örnekte, C sınıfı IP adresleri üretilir, ancak aynı yöntemi kullanarak diğer IP sınıf aralıkları için de rastgele IP adresleri oluşturabilirsiniz. IP adresi oluşturma işlemi sırasında, her oktet için uygun aralıkta rastgele bir değer üretilir.