国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++實(shí)現(xiàn)查詢本機(jī)信息并且上報(bào)

這篇具有很好參考價(jià)值的文章主要介紹了C++實(shí)現(xiàn)查詢本機(jī)信息并且上報(bào)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

業(yè)務(wù)需求

共享文件夾、盤會(huì)導(dǎo)致系統(tǒng)安全性下降,故IT部門需要搜集公司中每臺(tái)電腦的共享情況,并且進(jìn)行上報(bào)

關(guān)鍵字

WMI查詢、Get請(qǐng)求、C++網(wǎng)絡(luò)庫(kù)mongoose

前置需要

1、簡(jiǎn)單C++語(yǔ)法知識(shí)
2、mongoose庫(kù)的導(dǎo)入
3、C++項(xiàng)目的啟動(dòng)

代碼

復(fù)制并不能直接使用,需導(dǎo)入mongoose庫(kù)
完整github項(xiàng)目代碼:https://github.com/Canwaiting/check_netshare
修改其中的變量url,app,white_list[],這個(gè)項(xiàng)目就是你的了

/*********************************************************
*
* 項(xiàng)目背景:共享文件夾、盤會(huì)導(dǎo)致系統(tǒng)安全性下降,故IT部門
* 需要搜集公司中每臺(tái)電腦的共享情況,并且進(jìn)行上報(bào)
*
*********************************************************/

#include <fstream>
#include <iostream>
#include "mongoose.h"
#define _WIN32_DCOM
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#include <string>
#include <time.h>
#include <sstream>
#include <iomanip> 
#pragma comment(lib, "wbemuuid.lib")
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup") //靜默運(yùn)行
using namespace std;

string wstring2string(wstring wstr, UINT nCode);
wstring string2wstring(string str);
LPCWSTR string2LPCWSTR(string str);
string WMIQuery(string table, string key);
string GetData();
string UploadData(string data);
string GetDateTime();
static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data);
bool IsDefaultShare(string share_name, string share_path);
inline char* ConvertBSTRToString(BSTR pSrc);

//退出標(biāo)志 用于控制關(guān)閉事件循環(huán)
static int exit_flag = 0; 
//APP版本信息 
static const string app = "XXX";
//白名單
static const string white_lists[] =
{
"IPC$",
"ADMIN$",
//"print$" 打印機(jī),暫時(shí)不需要
};
//上傳數(shù)據(jù)的地址前綴
static string url = "XXX";

int main(int argc, char** argv)
{
    string data; 
    data = GetData(); 

    //拼接數(shù)據(jù),并轉(zhuǎn)成UTF-8
    url += data; 
    wstring wstr = string2wstring(url);
    url = wstring2string(wstr, CP_UTF8); 

    UploadData(url); 
    //getchar();

    return 0; 
}

string GetData() 
{
    stringstream ss;
    string date_time = "";
    string host_name = "";
    string machine_code= "";
    string share_lists = "";
    string data = "";

    date_time = GetDateTime();
    host_name = WMIQuery("Win32_ComputerSystem", "Name"); 
    machine_code= WMIQuery("Win32_BIOS","SerialNumber"); 
    share_lists = WMIQuery("win32_share",""); //這個(gè)特殊處理


    ss << "&APP=" << app
        << "&DateTime=" << date_time
        << "&HostName=" << host_name
        << "&MachineCode=" << machine_code
        << "&ShareLists=" << share_lists;
    data = ss.str();


    /*
cout << "**********" << endl;
cout << "APP: " << app << endl;
cout << "DateTime: " << date_time << endl;
cout << "HostName: " << host_name << endl;
cout << "MachineCode: " << machine_code<< endl;
cout << "ShareLists: " << share_lists<< endl;
cout << "**********" << endl;
cout << "data: " << data << endl;;
*/

    return data;
}

string UploadData(string data)
{
    char* s_url = new char[strlen(url.c_str()) + 1];
    strcpy(s_url,url.c_str());

    struct mg_mgr mgr;
    mg_mgr_init(&mgr);                        // Init manager
    mg_http_connect(&mgr, s_url, fn, NULL);   // Create client connection 
    while (exit_flag == 0) {
        mg_mgr_poll(&mgr, 1000); 
    }
    mg_mgr_free(&mgr);                        // Cleanup

    string response = ""; //TODO 暫時(shí)沒有什么要求
    return response; 
}

string WMIQuery(string table, string key) {
HRESULT hres;
string result = "";
string empty_result = "";
stringstream ss;

// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------

hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hres << endl;
return empty_result;                  // Program has failed.
}

// Step 2: --------------------------------------------------
// Set general COM security levels --------------------------

hres = CoInitializeSecurity(
NULL,
-1,                          // COM authentication
NULL,                        // Authentication services
NULL,                        // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
NULL,                        // Authentication info
EOAC_NONE,                   // Additional capabilities 
NULL                         // Reserved
);


if (FAILED(hres))
{

CoUninitialize();
return empty_result;                  // Program has failed.
}

// Step 3: ---------------------------------------------------
// Obtain the initial locator to WMI -------------------------

IWbemLocator* pLoc = NULL;

hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID*)&pLoc);

if (FAILED(hres))
{
CoUninitialize();
return empty_result;                  // Program has failed.
}

// Step 4: -----------------------------------------------------
// Connect to WMI through the IWbemLocator::ConnectServer method

IWbemServices* pSvc = NULL;

// Connect to the root\cimv2 namespace with
// the current user and obtain pointer pSvc
// to make IWbemServices calls.
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
NULL,                    // User name. NULL = current user
NULL,                    // User password. NULL = current
0,                       // Locale. NULL indicates current
NULL,                    // Security flags.
0,                       // Authority (for example, Kerberos)
0,                       // Context object 
&pSvc                    // pointer to IWbemServices proxy
);

if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x"
<< hex << hres << endl;
pLoc->Release();
CoUninitialize();
return empty_result;                  // Program has failed.
}

//cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;


// Step 5: --------------------------------------------------
// Set security levels on the proxy -------------------------

hres = CoSetProxyBlanket(
pSvc,                        // Indicates the proxy to set
RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
NULL,                        // Server principal name 
RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL,                        // client identity
EOAC_NONE                    // proxy capabilities 
);

if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return empty_result;                  // Program has failed.
}

// Step 6: --------------------------------------------------
// Use the IWbemServices pointer to make requests of WMI ----

// For example, get the name of the operating system
IEnumWbemClassObject* pEnumerator = NULL;
string sql = "SELECT * FROM " + table;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t((wchar_t*) (_bstr_t(sql.c_str()))),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);

if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return empty_result;                  // Program has failed.
}

// Step 7: -------------------------------------------------
// Get the data from the query in step 6 -------------------

IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;

while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);

if (0 == uReturn)
{
break;
}

VARIANT vtProp;

VariantInit(&vtProp);

// Get the value of the Name property 
if (key == "") {
hr =  pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
string share_name = _com_util::ConvertBSTRToString(vtProp.bstrVal);
hr =  pclsObj->Get(L"Path", 0, &vtProp, 0, 0); 
string share_path = _com_util::ConvertBSTRToString(vtProp.bstrVal);
if (!IsDefaultShare(share_name, share_path))
{
ss << "\"" << share_name << "\"";
ss << ":";
ss << "\"" << share_path << "\"";
ss << ","; 
}
}
else {
hr = pclsObj->Get(string2LPCWSTR(key), 0, &vtProp, 0, 0);
ss << ConvertBSTRToString(vtProp.bstrVal); 
//ss << _com_util::ConvertBSTRToString(vtProp.bstrVal); 
}
VariantClear(&vtProp);

pclsObj->Release();
}

// Cleanup
// ========

pSvc->Release();
pLoc->Release();
pEnumerator->Release();
CoUninitialize();

result = ss.str();
if (key == "") {
result = result.substr(0, result.length() - 1);
}
return result; 
}

LPCWSTR string2LPCWSTR(string str)
{
size_t size = str.length();
int wLen = ::MultiByteToWideChar(CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0);
wchar_t* buffer = new wchar_t[wLen + 1];
memset(buffer, 0, (wLen + 1) * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, (LPWSTR)buffer, wLen);
return buffer;
}

string GetDateTime()
{

string date_time = "";
time_t nowtime;
time(&nowtime); //獲取1970年1月1日0點(diǎn)0分0秒到現(xiàn)在經(jīng)過(guò)的秒數(shù)
tm tm_t;
localtime_s(&tm_t, &nowtime); //將秒數(shù)轉(zhuǎn)換為本地時(shí)間,年從1900算起,需要+1900,月為0-11,所以要+1
stringstream ss;
ss << tm_t.tm_year + 1900
<< setw(2) << setfill('0') << tm_t.tm_mon + 1
<< setw(2) << setfill('0') << tm_t.tm_mday
<< " "
<< setw(2) << setfill('0') << tm_t.tm_hour 
<< ":" 
<< setw(2) << setfill('0') << tm_t.tm_min 
<< ":" 
<< setw(2) << setfill('0') << tm_t.tm_sec;
date_time = ss.str();
return date_time; 
}

//不上報(bào)默認(rèn)的、在白名單內(nèi)的共享盤
bool IsDefaultShare(string share_name, string share_path)
{
//1、系統(tǒng)默認(rèn)共享盤
if (!share_name.empty() && !share_path.empty() &&  // 非空
share_name[share_name.length() - 1] == '$' &&  // 共享名最后一個(gè)字符一定是$
share_path.length() == 3 &&  // 資源必須為 X:\ 的格式
share_name.substr(0,share_name.length() - 1) == share_path.substr(0,share_path.length() - 2))  // 盤符名一定要對(duì)得上 
{
return true;
}
//2、白名單
for (string white_list_item : white_lists)
{
if (share_name == white_list_item)
{
return true;
} 
} 
return false; 
}

static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data)
{
char* s_url = new char[strlen(url.c_str()) + 1];
strcpy(s_url,url.c_str());
if (ev == MG_EV_CONNECT) { 
struct mg_str host = mg_url_host(s_url);
// Send request
mg_printf(c,
"GET %s HTTP/1.0\r\n"
"Host: %.*s\r\n"
"\r\n",
mg_url_uri(s_url), (int)host.len, host.ptr);
} if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message* hm = (struct mg_http_message*)ev_data;
exit_flag = 1;
}
}

//重新實(shí)現(xiàn)_com_util的ConvertBSTRToString
inline char* ConvertBSTRToString(BSTR pSrc)
{
//if (!pSrc) return NULL;  原本返回空會(huì)導(dǎo)致空指針異常
if (!pSrc)
{
char* szOut = new char[1];
szOut[0] = '\0';
return szOut;
}

DWORD cb, cwch = ::SysStringLen(pSrc);

char* szOut = NULL;

if (cb = ::WideCharToMultiByte(CP_ACP, 0,
pSrc, cwch + 1, NULL, 0, 0, 0))
{
szOut = new char[cb];
if (szOut)
{
szOut[cb - 1] = '\0';

if (!::WideCharToMultiByte(CP_ACP, 0,
pSrc, cwch + 1, szOut, cb, 0, 0))
{
delete[]szOut;//clean up if failed;
szOut = NULL;
}
}
} 
return szOut;
};

wstring string2wstring(string str)
{
wstring result;
//獲取緩沖區(qū)大小,并申請(qǐng)空間,緩沖區(qū)大小按字符計(jì)算  
int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
TCHAR* buffer = new TCHAR[len + 1];
//多字節(jié)編碼轉(zhuǎn)換成寬字節(jié)編碼  
MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);
buffer[len] = '\0';             //添加字符串結(jié)尾  
//刪除緩沖區(qū)并返回值  
result.append(buffer);
delete[] buffer;
return result;
}

string wstring2string(wstring wstr, UINT nCode)
{
string result;
//獲取緩沖區(qū)大小,并申請(qǐng)空間,緩沖區(qū)大小事按字節(jié)計(jì)算的  
int len = WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
char* buffer = new char[len + 1];
//寬字節(jié)編碼轉(zhuǎn)換成多字節(jié)編碼  
WideCharToMultiByte(nCode, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
buffer[len] = '\0';
//刪除緩沖區(qū)并返回值  
result.append(buffer);
delete[] buffer;
return result;
}

牢騷

本來(lái)是用C#寫的,但是打出來(lái)的包幾十M,不符合要求;還是得用回C++,各種輪子都要自己造,還得轉(zhuǎn)字符;差點(diǎn)就完不成了 : )

部分參考

https://www.jb51.net/softjc/2124_2.html
https://mongoose.ws/documentation/tutorials/http-client/
https://blog.csdn.net/hanxiaoyong_/article/details/123494927
https://github.com/tashaxing/cpphttpdemo文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450202.html

到了這里,關(guān)于C++實(shí)現(xiàn)查詢本機(jī)信息并且上報(bào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 軟件機(jī)器人財(cái)務(wù)報(bào)表信息的采集和錄入、抵押貸款信息查詢助力銀行貸款業(yè)務(wù)管理

    隨著科技的飛速發(fā)展,自動(dòng)化的應(yīng)用場(chǎng)景也越來(lái)越廣泛。博為小幫軟件機(jī)器人的出現(xiàn),無(wú)疑為眾多行業(yè)帶來(lái)了巨大的轉(zhuǎn)變,其中就包括銀行貸款業(yè)務(wù)。 軟件機(jī)器人是一種可以模擬人類行為,自動(dòng)化執(zhí)行高重復(fù)性任務(wù)。銀行業(yè)務(wù)中,許多重復(fù)性高、規(guī)則明確的工作,如企業(yè)客戶

    2024年02月07日
    瀏覽(96)
  • 微信小程序開發(fā)---購(gòu)物商城系統(tǒng)。【詳細(xì)業(yè)務(wù)需求描述+實(shí)現(xiàn)效果】

    微信小程序開發(fā)---購(gòu)物商城系統(tǒng)?!驹敿?xì)業(yè)務(wù)需求描述+實(shí)現(xiàn)效果】

    視頻演示 以下演示為手機(jī)真機(jī)錄屏 微信小程序商品系統(tǒng)功能演示 ??????該微信商城系統(tǒng)實(shí)現(xiàn)的主要如下圖所示 3.1 首頁(yè) ???????首頁(yè)基本構(gòu)成:1、頂部搜索頁(yè);2、輪播圖(點(diǎn)擊輪播圖可跳轉(zhuǎn));3、導(dǎo)航欄分類(點(diǎn)擊可跳轉(zhuǎn))。4、商品分類圖集(點(diǎn)擊頁(yè)面可跳轉(zhuǎn));

    2024年02月11日
    瀏覽(22)
  • 【業(yè)務(wù)功能篇20】Springboot java邏輯實(shí)現(xiàn)動(dòng)態(tài)行轉(zhuǎn)列需求

    【業(yè)務(wù)功能篇20】Springboot java邏輯實(shí)現(xiàn)動(dòng)態(tài)行轉(zhuǎn)列需求

    在此前,我也寫過(guò)一個(gè)行轉(zhuǎn)列的文章,是用存儲(chǔ)過(guò)程sql處理的一個(gè)動(dòng)態(tài)的邏輯 Mysql 存儲(chǔ)過(guò)程Mybatis框架call調(diào)用 實(shí)現(xiàn)動(dòng)態(tài)行轉(zhuǎn)列 那么后面我們同樣又接收了業(yè)務(wù)的一個(gè)新需求,針對(duì)的是不同的業(yè)務(wù)數(shù)據(jù),做的同樣的一個(gè)展示數(shù)據(jù)報(bào)表,同樣還是產(chǎn)品歸屬信息表頭,拼接查詢年

    2024年02月09日
    瀏覽(32)
  • Java 多輸入框查詢需求實(shí)現(xiàn)

    Java 多輸入框查詢需求實(shí)現(xiàn)

    ??wei_shuo的個(gè)人主頁(yè) ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! 需求分析 任意一個(gè)輸入框,輸入內(nèi)容點(diǎn)擊搜索都可以精準(zhǔn)搜索到對(duì)應(yīng)的內(nèi)容 代碼實(shí)現(xiàn) Controller接口編寫 ResultPageResultDisputeMerchantManageResponse: 返回給前端的字段:VO @RequestBody DisputeMerchantManageRequest request: 接收前端傳遞的

    2024年02月08日
    瀏覽(18)
  • 使用springboot實(shí)現(xiàn)查詢更改數(shù)據(jù)庫(kù)需求

    使用springboot實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫(kù)數(shù)據(jù)交互請(qǐng)求 實(shí)現(xiàn):通過(guò)springboot框架,實(shí)現(xiàn)接口 /user/view; 查詢數(shù)據(jù)庫(kù)user表中的user數(shù)據(jù), /user/insert; 新增user數(shù)據(jù)到user表 /user/update 修改user的對(duì)應(yīng)user信息 集成規(guī)范數(shù)據(jù)響應(yīng): 功能實(shí)現(xiàn): 定義簡(jiǎn)單的user類并添加對(duì)應(yīng)的user表,用于數(shù)據(jù)交互 創(chuàng)建數(shù)據(jù)訪問(wèn)

    2024年02月16日
    瀏覽(20)
  • 從零開始,我的第一個(gè)物聯(lián)網(wǎng)平臺(tái)搭建好了,ESP8266+DHT11+阿里云平臺(tái)+IOT StudioWEB應(yīng)用開發(fā),實(shí)現(xiàn)網(wǎng)頁(yè)實(shí)時(shí)查看設(shè)備上報(bào)的信息,控制開關(guān)

    ? ? 記錄下自己做的第一個(gè)物聯(lián)網(wǎng)項(xiàng)目,真正從零開始,斷斷續(xù)續(xù)花了2個(gè)月時(shí)間看各種視頻,網(wǎng)站學(xué)習(xí)有關(guān)物聯(lián)網(wǎng)的知識(shí),期間碰到過(guò)好多問(wèn)題,沒有人指導(dǎo),都得靠自己慢慢研究,有時(shí)會(huì)很迷茫,沒有方向,但還得堅(jiān)持下去,當(dāng)經(jīng)過(guò)自己的努力解決一個(gè)個(gè)問(wèn)題時(shí),會(huì)很興奮

    2024年01月19日
    瀏覽(106)
  • STM32的電動(dòng)自行車信息采集上報(bào)系統(tǒng)(學(xué)習(xí))

    STM32的電動(dòng)自行車信息采集上報(bào)系統(tǒng)(學(xué)習(xí))

    針對(duì)電動(dòng)自行車實(shí)時(shí)監(jiān)管不便的問(wèn)題,設(shè)計(jì)了一種基于STM32的電動(dòng)自行車信息采集系統(tǒng),通過(guò)獲取電池、位置和行駛狀態(tài)信息并上報(bào)到服務(wù)器中,實(shí)現(xiàn)實(shí)時(shí)監(jiān)管。 通過(guò)多路串口請(qǐng)求電池、行駛狀態(tài)和位置信息,以并發(fā)方式進(jìn)行數(shù)據(jù)接收、解析、模塊控制和數(shù)據(jù)上報(bào)等操作;

    2024年02月14日
    瀏覽(21)
  • 安卓開發(fā)后臺(tái)應(yīng)用周期循環(huán)獲取位置信息上報(bào)服務(wù)器

    安卓開發(fā)后臺(tái)應(yīng)用周期循環(huán)獲取位置信息上報(bào)服務(wù)器

    最近有需求,在APP啟動(dòng)后,退到后臺(tái),還要能實(shí)現(xiàn)周期獲取位置信息上報(bào)服務(wù)器,研究了一下實(shí)現(xiàn)方案。 一、APP退到后臺(tái)后網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn) APP退到后臺(tái)后,實(shí)現(xiàn)周期循環(huán)發(fā)送網(wǎng)絡(luò)請(qǐng)求。目前嘗試了兩種方案是OK,如下: (1)AlarmManager + 前臺(tái)服務(wù) +廣播的方案,可以正常實(shí)現(xiàn),

    2024年02月16日
    瀏覽(22)
  • thinkphp 5 實(shí)現(xiàn)UNION ALL 3個(gè)聯(lián)表查詢,并且?guī)纤阉鳁l件,名稱,時(shí)間,手機(jī)號(hào)

    在ThinkPHP 5中實(shí)現(xiàn)帶有搜索條件、名稱、時(shí)間和手機(jī)號(hào)的3個(gè)聯(lián)表查詢(UNION ALL),您可以按照以下步驟進(jìn)行操作: 確保已經(jīng)配置好數(shù)據(jù)庫(kù)連接信息和相關(guān)的模型。 使用 union() 方法來(lái)構(gòu)建3個(gè)聯(lián)表查詢,同時(shí)在每個(gè)查詢中添加所需的搜索條件、名稱、時(shí)間和手機(jī)號(hào)。 在上述代碼

    2024年02月12日
    瀏覽(21)
  • Mac查詢本機(jī)ip地址

    Mac查詢本機(jī)ip地址

    Mac系統(tǒng)版本和網(wǎng)絡(luò)配置不同,可能會(huì)有一些細(xì)微差別。 ????????并回車,在輸出的信息中,查找“inet”或“inet6”字樣,后面跟著的數(shù)字就是你的IP地址,然后在輸出中查找以 “inet “ 或 “inet6 “ 開頭的行,這些行后面跟著的就是對(duì)應(yīng)的IP地址。 (1)、查看特定網(wǎng)絡(luò)接

    2024年01月23日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包