以下是用c++写的QT代码,如果要直接在C++上运行,代码需要稍微改改:

   QString Network::Get_Gate_Way() {
        #ifdef Q_OS_WIN
        QProcess cmd_pro;
        QString    cmd_str = QString( "route print" );
        cmd_pro.start( "cmd.exe", QStringList() << "/c" << cmd_str );
        cmd_pro.waitForStarted();
        cmd_pro.waitForFinished();
        QString result = cmd_pro.readAll();
        QString pattern( "0\.0\.0\.0 *(0|128)\.0\.0\.0 *([0-9\.]*)" );
        QRegExp rx( pattern );
        int pos = result.indexOf( rx );
        if ( pos <= 0 ) {
            return("404");
        }
        return(rx.cap( 2 ) );
        #endif

        FILE *fp;
        char buf[512];
        char cmd[128];
        char gateway[30];
        char *tmp;

        #ifdef Q_OS_LINUX
            strcpy( cmd, "ip route" );
        #endif

        #ifdef Q_OS_MAC
            strcpy( cmd, "route get default | grep gateway" );
        #endif

        fp = popen( cmd, "r" );
        if ( NULL == fp ) {
            perror( "popen error" );
            /* 未获取到信息 */
            return("400");
        }

        #ifdef Q_OS_LINUX
            while ( fgets( buf, sizeof(buf), fp ) != NULL ) {
            tmp = buf;
            while ( *tmp && isspace( *tmp ) )
                        ++tmp;
            if ( strncmp( tmp, "default", strlen( "default" ) ) == 0 )
                        break;
        }
        sscanf( buf, "%*s%*s%s", gateway );
        printf( "default gateway:%s/n", gateway );
        pclose( fp );
        #endif

        #ifdef Q_OS_MAC
        QString gateway = fgets( buf, sizeof(buf), fp );
        pclose( fp );
        gateway = gateway.simplified().replace( QRegExp( "gateway: " ), "" );
        #endif

        return(gateway);
    }
最后修改:2023 年 07 月 25 日
您的赞赏是对我最大的支持。