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

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Hi,大家好,我是搶老婆酸奶的小肥仔。

在日常我們逛網(wǎng)站的時(shí)候會發(fā)現(xiàn)我們登錄后會出現(xiàn)歸屬地信息,例如:我在廣州登錄會顯示廣東廣州,有些更加精確的會顯示到區(qū)縣。

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

那么我們來看看有哪些方式來獲取歸屬地信息?今天我們來聊一聊。

公共方法:

獲取用戶ip地址:

/**
 * @author: jiangjs
 * @description: 獲取當(dāng)前真實(shí)IP
 * @date: 2022/5/23 16:42
 **/
public class GetUserIP {

    public static final Logger log = LoggerFactory.getLogger(GetUserIP.class);

    public static String getUserIpAddress(HttpServletRequest request){
        try {
            String realIp = request.getHeader("X-Real-IP");
            String forwardedIp = request.getHeader("X-Forwarded-For");
            String clientIp = request.getHeader("Proxy-Client-IP");
            String proxyIp = request.getHeader("WL-Proxy-Client-IP");
            String httpClientIp = request.getHeader("HTTP_CLIENT_IP");
            String xForwardedIp = request.getHeader("HTTP_X_FORWARDED_FOR");
            String remoteAddress = InetAddress.getLocalHost().getHostAddress();
            if(StringUtils.isNotEmpty(forwardedIp) && !"unKnown".equalsIgnoreCase(forwardedIp)){
                //多次反向代理后會有多個(gè)Ip值,第一個(gè)Ip才是真實(shí)Ip
                int index = forwardedIp.indexOf(",");
                if(index != -1){
                    return forwardedIp.substring(0,index);
                }else{
                    return forwardedIp;
                }
            }
            return StringUtils.isNoneBlank(realIp) && !"unKnown".equalsIgnoreCase(realIp) ? realIp :
            StringUtils.isNoneBlank(clientIp) && !"unKnown".equalsIgnoreCase(clientIp) ? clientIp :
            StringUtils.isNoneBlank(proxyIp) && !"unKnown".equalsIgnoreCase(proxyIp) ? proxyIp :
            StringUtils.isNoneBlank(httpClientIp) && !"unKnown".equalsIgnoreCase(httpClientIp) ? httpClientIp :
            StringUtils.isNoneBlank(xForwardedIp) && !"unKnown".equalsIgnoreCase(xForwardedIp) ? xForwardedIp : remoteAddress;
        }catch (Exception e){
            e.printStackTrace();
            log.error("獲取用戶Ip報(bào)錯:{}",e.getMessage());
        }
        return "";
    }
}

1、Ip2Region

Ip2Region:見名知意,就是ip轉(zhuǎn)換成區(qū)域。根據(jù)碼云上的簡介,Ip2Region是一個(gè)離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,能夠10微妙級別的查詢效率,提供眾多主流編程語言的xdb數(shù)據(jù)生成和查詢客戶端實(shí)現(xiàn)。

1.1 特性

其主要特性有以下幾點(diǎn):

1.1.1 IP數(shù)據(jù)管理框架

xdb 支持億級別的 IP 數(shù)據(jù)段行數(shù),默認(rèn)的 region 信息都固定了格式:國家|區(qū)域|省份|城市|ISP,缺省的地域信息默認(rèn)是0。 region 信息支持完全自定義,我們可以按照自己的需求來管理IP定位數(shù)據(jù)。

1.1.2 數(shù)據(jù)去重和壓縮

xdb 格式生成程序會自動去重和壓縮部分?jǐn)?shù)據(jù),默認(rèn)的全部 IP 數(shù)據(jù),生成的 ip2region.xdb 數(shù)據(jù)庫是 11MiB,隨著數(shù)據(jù)的詳細(xì)度增加數(shù)據(jù)庫的大小也慢慢增大。

1.1.3 極速查詢響應(yīng)

基于xdb文件查詢單次響應(yīng)時(shí)間在10微妙級別,可以通過以下添加內(nèi)存的方式加速查詢:

  1. vIndex 索引緩存 :使用固定的 512KiB 的內(nèi)存空間緩存 vector index 數(shù)據(jù),減少一次 IO 磁盤操作,保持平均查詢效率穩(wěn)定在10-20微秒之間。
  2. xdb 整個(gè)文件緩存:將整個(gè) xdb 文件全部加載到內(nèi)存,內(nèi)存占用等同于 xdb 文件大小,無磁盤 IO 操作,保持微秒級別的查詢效率。

1.2 代碼實(shí)現(xiàn)

1.2.1 引入jar包
<dependency>
  <groupId>org.lionsoul</groupId>
  <artifactId>ip2region</artifactId>
  <version>2.6.5</version>
</dependency>
1.2.2 封裝工具
/**
 * @author: jiangjs
 * @description: 創(chuàng)建Ip2Region工具類
 * @date: 2022/7/28 14:31
 **/
@Component
public class Ip2RegionUtil {
    public static final Logger log = LoggerFactory.getLogger(Ip2RegionUtil.class);

    /**
     * 將整個(gè)庫進(jìn)行緩存到內(nèi)存,基于這個(gè)庫創(chuàng)建查詢對象來實(shí)現(xiàn)基于文件的查詢
     * 獲取Searcher
     */
    private Searcher getSearcher() throws IOException {
        //獲取地址下的庫數(shù)據(jù)
        byte[] bytes = Searcher.loadContentFromFile("D:\ipchange\ip2region\ip2region.xdb");
        return Searcher.newWithBuffer(bytes);
    }

    /**
     * 根據(jù)ip地址直接返回國家、省、城市信息
     * @param ip ip
     * @return 返回地址
     */
    public String changeIpToAddress(String ip){
        //獲取searcher
        Searcher searcher = null;
        try {
            searcher = getSearcher();
            return searcher.search(ip);
        }catch (Exception e){
            log.error(String.format("ip轉(zhuǎn)地址報(bào)錯:%s",e.getMessage()));
            e.printStackTrace();
            return "";
        }finally {
            try {
                if (Objects.nonNull(searcher)){
                    searcher.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }

    }
}

ip2region.xdb:為ip對應(yīng)地址的xdb文件,這個(gè)需要不定期的進(jìn)行更新,更新方法可參考ip2region的碼云地址。

1.3 測試

我們提供兩個(gè)方法,一個(gè)方法直接獲取ip地址,另一個(gè)通過ip138獲取到的ip地址,傳入到方法進(jìn)行歸屬地的查詢。

@RestController
@RequestMapping("/ip2region")
public class Ip2RegionChangeController {

    @Autowired
    private Ip2RegionUtil regionUtil;

    @GetMapping("/getIpToAddress.do")
    public ResultUtil<String> getIpToAddressNoIp(HttpServletRequest request){
        String userIp = GetUserIP.getUserIpAddress(request);
        return ResultUtil.success(regionUtil.changeIpToAddress(userIp));
    }
    @GetMapping("/getIpToAddress.do/{ip}")
    public ResultUtil<String> getIpToAddress(@PathVariable("ip") String ip){
        return ResultUtil.success(regionUtil.changeIpToAddress(ip));
    }
}

直接在瀏覽器上進(jìn)行訪問:

1、直接訪問

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

2、通過ip138查詢的IP

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

通過測試的結(jié)果我們可以看到,直接獲取到內(nèi)網(wǎng)的地址并沒有解析出地址,而是直接提示了內(nèi)網(wǎng)。而通過ip138查詢到外網(wǎng)地址,能夠正常的解析出地址。

2、geoip2

geopip2:是國外的,一個(gè)只有100kb的數(shù)據(jù)庫,小巧實(shí)用,加載時(shí)間極短,查詢效率高,項(xiàng)目只包含大陸用戶需要的中國IP地址段。geopip2是免費(fèi)的,里面既包含地理信息,同時(shí)也包含了經(jīng)緯度。GeoIP依賴MaxMind的IP數(shù)據(jù),需要頻繁更新。

大家有興趣的話可以直接取git上看看介紹。

2.1 代碼實(shí)現(xiàn)

2.1.1 引入jar包
<dependency>
  <groupId>com.maxmind.geoip2</groupId>
  <artifactId>geoip2</artifactId>
  <version>2.8.1</version>
</dependency>
2.1.2 封裝工具
/**
 * @author: jiangjs
 * @description:
 * @date: 2022/5/23 15:12
 **/
public class GeoLiteUtil {

    public static final Logger log = LoggerFactory.getLogger(GeoLiteUtil.class);

    /**
     * 獲取ip所在國家
     * @param ip 需查詢的IP
     * @return 返回查詢結(jié)果
     * @throws UnknownHostException 異常
     */
    private static String getCountry(String ip) throws Exception {
        DatabaseReader reader = getDatabaseReader();
        return Objects.nonNull(reader) ? reader.city(InetAddress.getByName(ip)).getCountry().getNames().get("zh-CN") : "";
    }

    /**
     * 獲取ip所在省份
     * @param ip 需查詢的IP
     * @return 返回查詢結(jié)果
     * @throws UnknownHostException 異常
     */
    private static String getProvince(String ip) throws Exception {
        DatabaseReader reader = getDatabaseReader();
        return Objects.nonNull(reader) ? reader.city(InetAddress.getByName(ip)).getMostSpecificSubdivision().getNames().get("zh-CN") : "";

    }

    /**
     * 獲取ip所在市
     * @param ip 需查詢的IP
     * @return 返回查詢結(jié)果
     * @throws UnknownHostException 異常
     */
    private static String getCity(String ip) throws Exception {
        DatabaseReader reader = getDatabaseReader();
        return Objects.nonNull(reader) ? reader.city(InetAddress.getByName(ip)).getCity().getNames().get("zh-CN") : "";
    }

    /**
     * 獲取ip所在經(jīng)緯度
     * @param ip 需查詢的IP
     * @return 返回查詢結(jié)果
     * @throws UnknownHostException 異常
     */
    private static JSONObject getLongitudeAndLatitude (String ip) throws Exception {
        DatabaseReader reader = getDatabaseReader();
        JSONObject resJson = new JSONObject();
        resJson.put("latitude",0d);
        resJson.put("longitude",0d);
        if (Objects.nonNull(reader)){
            //獲取緯度信息
            Double latitude = reader.city(InetAddress.getByName(ip)).getLocation().getLatitude();
            //獲取經(jīng)度信息
            Double longitude = reader.city(InetAddress.getByName(ip)).getLocation().getLongitude();
            resJson.put("latitude",latitude);
            resJson.put("longitude",longitude);
        }
        return resJson;
    }

    private static DatabaseReader getDatabaseReader(){
        InputStream stream = null;
        try {
            stream = GeoLiteUtil.class.getClassLoader().getResourceAsStream("static/geo/GeoLite2-City.mmdb");
            return new DatabaseReader.Builder(stream).build();
        }catch (Exception e){
            e.printStackTrace();
            log.error("獲取geolite2數(shù)據(jù)庫報(bào)錯:{}",e.getMessage());
        }finally {
            try {
                if (Objects.nonNull(stream)){
                    stream.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 根據(jù)Ip獲取歸屬信息
     * @param ip 用戶Ip
     * @return 返回查詢結(jié)果
     * @throws Exception 異常
     */
    public static JSONObject getIpToAddress(String ip) throws Exception {
        StringJoiner address = new StringJoiner(",");
        address.add(getCountry(ip));
        address.add(getProvince(ip));
        address.add(getCity(ip));
        JSONObject resJson = GeoLiteUtil.getLongitudeAndLatitude(ip);
        resJson.put("address",String.valueOf(address));
        return resJson;
    }
}

getDatabaseReader() :讀取本地的GeoLite2-City.mmdb并創(chuàng)建DatabaseReader對象。后續(xù)使用這個(gè)對象來根據(jù)Ip讀取國家、省級、市級、經(jīng)緯度等信息。

2.2 測試

測試也跟ip2region一樣,提供兩個(gè)方法,一個(gè)測試內(nèi)網(wǎng),一個(gè)傳遞外網(wǎng)進(jìn)行測試。

@RestController
@RequestMapping("/change/ip")
public class GeoIpChangeController {

    @Resource
    private GeoIpChangeService geoIpChangeService;
    @GetMapping("/getIpAddress.do/{ip}")
    public ResultUtil<JSONObject> getIpAddress(@PathVariable("ip") String ip, HttpServletRequest request){
        try {
            return ResultUtil.success(GeoLiteUtil.getIpToAddress(ip));
        }catch (Exception e){
            e.printStackTrace();
        }
        return ResultUtil.error("獲取ip對應(yīng)地址等信息報(bào)錯");
    }

    @GetMapping("/getLocationIpAddress.do")
    public ResultUtil<JSONObject> getLocationIpAddress( HttpServletRequest request){
        String userIp = GetUserIP.getUserIpAddress();
        try {
            return ResultUtil.success(GeoLiteUtil.getIpToAddress(userIp));
        }catch (Exception e){
            e.printStackTrace();
        }
        return ResultUtil.error("獲取ip對應(yīng)地址等信息報(bào)錯");
    }
}

直接在瀏覽器上進(jìn)行訪問:

1、直接訪問

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

2、通過外網(wǎng)查詢的IP

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

通過測試的結(jié)果我們可以看到,在解析內(nèi)網(wǎng)ip時(shí)直接報(bào)錯,提示數(shù)據(jù)庫中沒有這個(gè)ip。而通過外網(wǎng)地址就能夠正常的解析出地址。

3、頁面抓取

網(wǎng)絡(luò)上有很多這種根據(jù)ip查詢歸屬地的網(wǎng)站,因此我們可以通過調(diào)用其接口,通過返回頁面來抓取歸屬地信息。例如:我們常用的ip138就有可以抓取到。

抓取頁面就需要解析頁面,解析頁面我們可以使用jsoup。

3.1 引入jar包

<dependency>
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.15.2</version>
</dependency>

3.2 封裝方法

/**
 * @author: jiangjs
 * @description:
 * @date: 2023/9/20 16:12
 **/
public class Ip138ChangeUtil {

    private static final String URL = "http://www.ip138.com/iplookup.asp?ip=";
    private static final Logger log = LoggerFactory.getLogger(Ip138ChangeUtil.class);
    public static JSONObject getIpToAddress(String ip) throws IOException {
        JSONObject resJson = new JSONObject();
        Document document = Jsoup.connect(URL + ip + "&action=2").get();
        Elements es = document.select("script").eq(1);
        for (Element e : es) {
            String[] data = e.data().split("var");
            for (String variable : data) {
                if (variable.contains("=") && variable.contains("ip_result")){
                    String[] va = StringUtils.split(variable, "=");
                    String value = va[1].trim().substring(0,va[1].trim().length() - 1);
                    JSONObject object = JSONObject.parseObject(value);
                    log.info(String.format("獲取到的數(shù)據(jù)值:%s",value));
                    resJson.put("address", object.getString("ASN歸屬地"));
                }
            }
        }
        return resJson;
    }
}

工具類中通過訪問地址獲取到Document對象,然后在進(jìn)行解析,從而拿到歸屬地信息。

3.3 測試

@RestController
@RequestMapping("/ip138")
public class Ip138ChangeController {
    @GetMapping("/getIpToAddress.do/{ip}")
    public ResultUtil<JSONObject> getIpToAddress(@PathVariable("ip") String ip){
        try {
            return ResultUtil.success(Ip138ChangeUtil.getIpToAddress(ip));
        } catch (IOException e) {
            e.printStackTrace();
            return ResultUtil.error("查詢失敗");
        }
    }
}

直接訪問地址:

SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。,spring boot,tcp/ip,后端

從結(jié)果來看,其可以精確到區(qū)的。

【總結(jié)】

上述中介紹了三種通過Ip獲取歸屬地的方法,相比較而言:

ip2region相對用的比較多,很多博客、技術(shù)文檔都會進(jìn)行介紹,而且封裝使用也比較簡單,執(zhí)行速度也比較快;

geoip2:相對比較細(xì),可以根據(jù)需求直接獲取國家,省級等信息,但是伴隨的就是封裝稍微復(fù)雜點(diǎn),而且在解析內(nèi)網(wǎng)時(shí),由于數(shù)據(jù)庫中沒有對應(yīng)ip而報(bào)錯。

頁面抓?。哼@個(gè)就不推薦了,畢竟依賴于第三方,如果服務(wù)掛了的話就沒法使用了。

至于選擇ip2region還是geoip2,這個(gè)就要看具體的也無需求。

對了,ip2region和geoip2要去經(jīng)常更新庫哦。

好了,今天就跟大家叨叨到這,謝謝大家。

碼云地址:https://gitee.com/lovequeena/iptoaddress.git文章來源地址http://www.zghlxwxcb.cn/news/detail-845125.html

到了這里,關(guān)于SpringBoot通過ip獲取歸屬地,你應(yīng)該知道的幾種方式。的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java獲取IP及歸屬地

    Java獲取IP及歸屬地

    最近我們發(fā)現(xiàn)各大社交平臺都出現(xiàn)了一個(gè)新的功能:IP屬地。 比如某乎: 這個(gè)IP屬地是怎么做到的呢?今天我來教教你,保證你看完直呼Easy~ 1.Java網(wǎng)絡(luò)編程 2.Servlet 通過運(yùn)行這個(gè)方法,可以看到,控制臺打印了IP和城市信息,也就是我們想要的 IP屬地信息 啦! 在你的項(xiàng)目里,

    2024年02月11日
    瀏覽(101)
  • java獲取ip地址以及ip歸屬地工具類

    java獲取ip地址以及ip歸屬地工具類

    需要ip2region.db文件,可以前往github下載 歡迎訪問我的博客網(wǎng)站: www.yqiu.top

    2024年02月22日
    瀏覽(19)
  • Java根據(jù)IP地址獲取對應(yīng)歸屬地

    Java根據(jù)IP地址獲取對應(yīng)歸屬地

    最近,各大平臺都新增了評論區(qū)顯示發(fā)言者ip歸屬地的功能,例如嗶哩嗶哩,微博,知乎等等,下面,就來講講,Java 中是如何獲取 IP 屬地的 在Java中有多種獲取IP地址的方式,就不一一介紹了,給出了一個(gè)最常用的IP地址獲取方式,僅供參考,代碼如下: 對這里出現(xiàn)的幾個(gè)名詞解釋

    2023年04月24日
    瀏覽(23)
  • k8s~你應(yīng)該知道的ip和你應(yīng)該知道的端口

    k8s~你應(yīng)該知道的ip和你應(yīng)該知道的端口

    Node IP Cluster IP Pod IP Container IP node ip是指k8s節(jié)點(diǎn)的ip地址,這個(gè)ip是具體的服務(wù)器,它上面的端口是node port,是真實(shí)服務(wù)器上的端口。 在 Kubernetes 中,ClusterIP 是指 Service 類型中的一種,它為集群內(nèi)部的其他資源提供了一個(gè)虛擬 IP 地址。這個(gè)虛擬 IP 只在集群內(nèi)部可見,用于將請

    2024年02月04日
    瀏覽(16)
  • 使用 ip2region 獲取用戶的 IP 歸屬地

    使用 ip2region 獲取用戶的 IP 歸屬地

    ip2region 是一個(gè)離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,能實(shí)現(xiàn)10微秒級別的查詢效率,提供了眾多主流編程語言的xdb數(shù)據(jù)生成和查詢客戶端實(shí)現(xiàn)。 每個(gè) ip 數(shù)據(jù)段的 region 信息都固定了格式: 國家|區(qū)域|省份|城市|ISP ,只有中國的數(shù)據(jù)絕大部分精確到了城市,其他國家部分?jǐn)?shù)

    2024年02月13日
    瀏覽(17)
  • 知道一個(gè)服務(wù)器IP應(yīng)該怎么進(jìn)入

    知道一個(gè)服務(wù)器IP應(yīng)該怎么進(jìn)入

    首先我是國內(nèi),訪問國外的網(wǎng)站比如谷歌等,訪問特別慢,有時(shí)候甚至登錄不進(jìn)去。 現(xiàn)在知道了一個(gè)臺灣或者國外的服務(wù)器應(yīng)該怎么登錄進(jìn)去呢? 知道服務(wù)器IP之后,你還需要知道服務(wù)器的遠(yuǎn)程端口+帳號+密碼才能登錄的。 知道上面信息之后,大家可以在本地電腦試試。 通

    2024年02月04日
    瀏覽(25)
  • SpringBoot如何通過Nginx代理獲取真實(shí)IP

    springboot作為后臺代碼,獲取到的登錄IP是前臺的代理服務(wù)器地址,并不是用戶的真實(shí)IP地址,讓我們在做統(tǒng)計(jì)的時(shí)候無從下手。下面是一個(gè)后臺獲取IP地址的類,本質(zhì)上沒有什么問題,問題在于,Nginx給你的就是一個(gè)代理之后的地址,所以你當(dāng)然獲取不到真實(shí)的地址了。 那么如

    2024年01月17日
    瀏覽(97)
  • Mysql數(shù)據(jù)庫--修改root密碼的幾種方法(忘記密碼&知道密碼)

    Mysql數(shù)據(jù)庫--修改root密碼的幾種方法(忘記密碼&知道密碼)

    ?? 通過 alter user root identified by \\\'新密碼\\\'; ?? 通過 set password for 用戶名@\\\'用戶地址\\\' = \\\'新密碼\\\'; 2.1.1 ?? 停止mysql服務(wù) 2.1.2 ?? 創(chuàng)建mysql-init-file.txt文件 2.1.3 ?? init-file的權(quán)限(最好賦權(quán)一下) 2.1.3 ?? 使用–init-file選項(xiàng)啟動mysql服務(wù) 2.1.4 ?? 新密碼連接測試(密碼:Zyl@123321)

    2024年02月08日
    瀏覽(93)
  • vue獲取當(dāng)前路由的幾種方式

    第一種 第二種 通過getCurrentInstance 獲取當(dāng)前的組件實(shí)例,從而通過其獲取router,然后胡德當(dāng)前路由地址 第三種 第四種 第五種

    2024年02月13日
    瀏覽(25)
  • 快速查看本機(jī)公網(wǎng)IP的幾種方法

    快速查看本機(jī)公網(wǎng)IP的幾種方法

    鏈接: https://ifconfig.me/ 命令行 鏈接: https://ifconfig.io/ 命令行 鏈接:https://ifconfig.co/ 命令行 鏈接:https://ipinfo.io/ 命令行 【完】

    2024年02月11日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包