MST

星途 面试题库

面试题:C语言实现简单NAT转换函数

请用C语言编写一个函数,该函数能够实现简单的网络地址转换(NAT),将内部IP地址转换为外部IP地址。假设内部IP地址和外部IP地址都以点分十进制字符串形式传入,例如"192.168.1.100"和"202.100.1.50",函数需要返回转换后的结果。请考虑边界情况,如IP地址格式不正确的处理。
13.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 检查IP地址格式是否正确
int isValidIP(const char *ip) {
    int num, dots = 0;
    const char *p = ip;
    while (*p) {
        if (*p >= '0' && *p <= '9') {
            num = 0;
            while (*p >= '0' && *p <= '9') {
                num = num * 10 + (*p - '0');
                p++;
            }
            if (num > 255) return 0;
        } else if (*p == '.') {
            dots++;
            p++;
        } else {
            return 0;
        }
    }
    return dots == 3;
}

// 进行NAT转换
char* natConvert(const char *internalIP, const char *externalIP) {
    if (!isValidIP(internalIP) ||!isValidIP(externalIP)) {
        return NULL;
    }
    char *result = (char*)malloc(strlen(externalIP) + 1);
    if (result == NULL) {
        return NULL;
    }
    strcpy(result, externalIP);
    return result;
}

你可以使用以下方式调用这个函数:

int main() {
    const char *internalIP = "192.168.1.100";
    const char *externalIP = "202.100.1.50";
    char *convertedIP = natConvert(internalIP, externalIP);
    if (convertedIP) {
        printf("转换后的IP地址: %s\n", convertedIP);
        free(convertedIP);
    } else {
        printf("IP地址格式不正确\n");
    }
    return 0;
}

上述代码中:

  1. isValidIP 函数用于检查传入的IP地址格式是否正确,确保IP地址是点分十进制形式且每个部分的值在0到255之间。
  2. natConvert 函数首先检查内部和外部IP地址格式是否正确,如果不正确则返回 NULL。如果格式正确,则分配内存并将外部IP地址复制到新的字符串中返回。
  3. main 函数中,演示了如何调用 natConvert 函数,并根据返回结果进行相应处理。记得释放分配的内存以避免内存泄漏。