[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fz05JdhC4vVlVhJbOcPam_EazjFTdIYFak_X9wKDew8k":3},{"id":4,"question":5,"answer":6,"answerHtml":7,"slug":8,"keywords":9,"article":10,"status":34,"aiModel":39,"aiConfidence":39,"updatedAt":51,"createdAt":51,"_status":50},934,"What if the MinIO web console is not on the default port 9000?","MinIO typically uses port 9000 for the API, but administrators may change it to 9001 or another port. In your automated detection script, first try port 9000; if you receive a `400 BadRequest` with a specific error message, try port 9001. The implementation in the [Penetration Basics - Minio Version Detection](\u002Fnews\u002Fpenetration-basics-minio-version-detection) article includes a fallback logic for port detection.","\u003Cp>MinIO typically uses port 9000 for the API, but administrators may change it to 9001 or another port. In your automated detection script, first try port 9000; if you receive a `400 BadRequest` with a specific error message, try port 9001. The implementation in the [Penetration Basics - Minio Version Detection](\u002Fnews\u002Fpenetration-basics-minio-version-detection) article includes a fallback logic for port detection.\u003C\u002Fp>\u003Cp>\u003Ca href=\"\u002Fnews\u002Fpenetration-basics-minio-version-detection-1\">Read the related One Day Sec article\u003C\u002Fa>\u003C\u002Fp>","what-if-the-minio-web-console-is-not-on-the-default-port-9000-1777481265509","port detection, default port, 9000, 9001, error handling",{"id":11,"title":12,"slug":13,"description":14,"content":15,"contentHtml":30,"cover":31,"author":32,"views":19,"readingTime":33,"status":34,"publishedAt":35,"seo":36,"tags":41,"qaPairs":42,"meta":47,"updatedAt":48,"createdAt":49,"_status":50},227,"Penetration Basics - Minio Version Detection","penetration-basics-minio-version-detection-1","Learn Minio version detection methods with Python automation. Includes implementation details, code, and security insights for penetration testing.",{"root":16},{"type":17,"format":18,"indent":19,"version":20,"children":21,"direction":29},"root","",0,1,[22],{"type":23,"format":18,"indent":19,"version":20,"children":24,"direction":29},"paragraph",[25],{"mode":26,"text":27,"type":28,"style":18,"detail":19,"format":19,"version":20},"normal","\u003Chtml>\u003Chead>\u003C\u002Fhead>\u003Cbody>\u003Ch2>0x00 Preface\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article will introduce methods for Minio version detection, implement automation through Python, document development details, and provide open-source code.\u003C\u002Fp>\u003Ch2>0x01 Introduction\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article will cover the following:\u003C\u002Fp>\u003Cul>\u003Cli>Implementation Approach\u003C\u002Fli>\u003Cli>Implementation Details\u003C\u002Fli>\u003Cli>Open-Source Code\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>0x02 Fundamentals\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>MinIO is a high-performance, distributed object storage system developed in Go. Minio can serve as a cloud storage solution for storing massive amounts of images, videos, and documents. Implemented in Go, the server can run on Windows, Linux, OS X, and FreeBSD, requiring only a standalone executable.\u003C\u002Fp>\u003Cp>For Windows environment setup, refer to: https:\u002F\u002Fmin.io\u002Fdocs\u002Fminio\u002Fwindows\u002Findex.html\u003C\u002Fp>\u003Ch3>1. Download\u003C\u002Fh3>\u003Cp>Latest version: https:\u002F\u002Fdl.min.io\u002Fserver\u002Fminio\u002Frelease\u002Fwindows-amd64\u002Fminio.exe\u003C\u002Fp>\u003Cp>Historical versions: https:\u002F\u002Fdl.min.io\u002Fserver\u002Fminio\u002Frelease\u002Fwindows-amd64\u002Farchive\u002F\u003C\u002Fp>\u003Cp>For historical versions, add .exe extension after download and run directly\u003C\u002Fp>\u003Ch3>2. Start the service\u003C\u002Fh3>\u003Cp>Command line parameters: minio.exe server C:\\minio --console-address :9090\u003C\u002Fp>\u003Ch3>3. Web access\u003C\u002Fh3>\u003Cp>URL address: http:\u002F\u002F127.0.0.1:9090\u003C\u002Fp>\u003Cp>Default username: minioadmin\u003C\u002Fp>\u003Cp>Default password: minioadmin\u003C\u002Fp>\u003Ch2>0x03 Implementation Approach\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>Minio version detection requires logging into the web console\u003C\u002Fp>\u003Cp>Access location: Health page, as shown below\u003C\u002Fp>\u003Cp>\u003Cimg alt=\"Alt text\" src=\"\u002Fuploads\u002Fdocx_image_1770015138474_0_ac742dce1b.png\">\u003C\u002Fp>\u003Cp>The page displays current version along with node and storage information\u003C\u002Fp>\u003Cp>In terms of program implementation, we can analyze the authentication process by capturing packets. The specific details are as follows:\u003C\u002Fp>\u003Ch3>1. Login\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Flogin\u003C\u002Fp>\u003Cp>Authentication information is passed in JSON format, with the following specific content:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>{\"accessKey\": \"minioadmin\",\"secretKey\": \"minioadmin\"}\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>After successful login, status code 204 is returned, and a Cookie: token=xxxx is added to the Header as a credential.\u003C\u002Fp>\u003Ch3>2. Read Version Information\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Fadmin\u002Finfo\u003C\u002Fp>\u003Cp>Requires Cookie: token=xxxx as a credential.\u003C\u002Fp>\u003Cp>The result is returned in JSON format, as shown in the figure below.\u003C\u002Fp>\u003Cp>\u003Cimg alt=\"Alt text\" src=\"\u002Fuploads\u002Fdocx_image_1770015141864_1_58b3dc1e1b.png\">\u003C\u002Fp>\u003Ch3>Additional: Obtain the latest version of Minio\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Fcheck-version\u003C\u002Fp>\u003Ch2>0x04 Implementation Details\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Ch3>1. Login\u003C\u002Fh3>\u003Cp>An issue to consider here: the default port has been modified.\u003C\u002Fp>\u003Cp>When implementing automation with a program, port 9000 is typically used, but there are cases where the port has been changed to 9001, and a very small number of instances have the port modified to other uncommon ports.\u003C\u002Fp>\u003Cp>If the port is incorrect, it will return status code 400, with a response content example:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003C!--?xml version=\"1.0\" encoding=\"UTF-8\"?-->\u003Cbr>\u003Cerror>\u003Ccode>BadRequest\u003C\u002Fcode>\u003Cmessage>An error occurred when parsing the HTTP request POST at '\u002Fapi\u002Fv1\u002Flogin'\u003C\u002Fmessage>\u003Cresource>\u002Fapi\u002Fv1\u002Flogin\u003C\u002Fresource>\u003Crequestid>\u003C\u002Frequestid>\u003Chostid>1d119326-9fa7-4c24-b2c8-c236a17cfd35\u003C\u002Fhostid>\u003C\u002Ferror>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>Therefore, in program implementation, a check can be added here: when using the default port 9000, if specific conditions are returned, prompt that the port is incorrect, then try port 9001. If it fails again, prompt to modify the default port.\u003C\u002Fp>\u003Cp>Complete example code:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>def loginMinIO(url, username, password):\u003Cbr>    print(\"[*] Try to login:\" + url)\u003Cbr>    headers = {\u003Cbr>        \"User-Agent\": \"Mozilla\u002F5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F81.0.4044.129 Safari\u002F537.36\",\u003Cbr>        \"Content-Type\": \"application\u002Fjson\",\u003Cbr>        \"Accept-Encoding\": \"gzip, deflate\",\u003Cbr>        \"Accept-Language\": \"en-US,en;q=0.9\"\u003Cbr>    }\u003Cbr>    target = url + \"\u002Fapi\u002Fv1\u002Flogin\"\u003Cbr>    d = {\"accessKey\": username,\u003Cbr>        \"secretKey\": password,\u003Cbr>    }\u003Cbr>    try:\u003Cbr>        res = session.post(target, headers=headers, json=d, verify = False, timeout = 10)\u003Cbr>        if res.status_code == 204:\u003Cbr>            print('[+] Login Success')\u003Cbr>            print(\"    Cookie:\")\u003Cbr>            print(\"    token=\" + res.cookies['token'])\u003Cbr>            return url\u003Cbr>        else:\u003Cbr>            print('[-] Login error')\u003Cbr>            if \"An error occurred when parsing the HTTP request POST at\" in res.text and \"9000\" in url:\u003Cbr>                print(\"    Wrong port,try to use 9001\")\u003Cbr>                newurl = url.rsplit(':9000')[0] +\":9001\"\u003Cbr>                print(\"[*] Try to login:\" + newurl + \"\u002Fapi\u002Fv1\u002Flogin\")\u003Cbr>                res = session.post(newurl + \"\u002Fapi\u002Fv1\u002Flogin\", headers=headers, json=d, verify = False, timeout = 10)\u003Cbr>                if res.status_code == 204:\u003Cbr>                    print('[+] Login Success')\u003Cbr>                    print(\"    Cookie:\")\u003Cbr>                    print(\"    token=\" + res.cookies['token'])\u003Cbr>                    return newurl\u003Cbr>                else:\u003Cbr>                    print('[-] Login error')\u003Cbr>                    print(\"    Wrong port,try to use another port\")\u003Cbr>                    sys.exit(0)\u003Cbr>            else:\u003Cbr>                print(res.status_code)\u003Cbr>                print(res.text)\u003Cbr>                sys.exit(0)        \u003Cbr>    except Exception as e:\u003Cbr>        print(\"[!]\")\u003Cbr>        print(e)\u003Cbr>        sys.exit(0)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>2. Read version information\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>The returned result is in JSON format. Example result:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>{\"advancedMetricsStatus\":\"not configured\",\"backend\":{\"backendType\":\"Erasure\"},\"servers\":[{\"commitID\":\"87cbd4126599ae825903230fdb32197204e42c22\",\"drives\":[{\"availableSpace\":33283801088,\"drivePath\":\"C:\\\\minio\",\"endpoint\":\"C:\\\\minio\",\"state\":\"ok\",\"totalSpace\":64422408192,\"usedSpace\":31138607104,\"uuid\":\"2d684591-69af-42c1-b940-ce7f4d711aa1\"}],\"endpoint\":\"127.0.0.1:9000\",\"network\":{\"127.0.0.1:9000\":\"online\"},\"state\":\"online\",\"uptime\":214,\"version\":\"2023-03-24T21:41:23Z\"}],\"widgets\":null}\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>There may be multiple servers, so traversal is required during parsing. Example code:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>dictt = res.json()[\"servers\"]\u003Cbr>for k in dictt:\u003Cbr>    print(\"   +server:  \" + str(k[\"network\"]))\u003Cbr>    print(\"    state:   \" + k[\"state\"])\u003Cbr>    print(\"    uptime:  \" + str(k[\"uptime\"]))\u003Cbr>    print(\"    version: \" + k[\"version\"])\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>0x05 Open Source Code\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>The complete implementation code has been uploaded to GitHub at the following address:\u003C\u002Fp>\u003Cp>An Open Source Project\u003C\u002Fp>\u003Cp>The code supports the following two commands:\u003C\u002Fp>\u003Cul>\u003Cli>getversion: used to obtain version information\u003C\u002Fli>\u003Cli>getinfo: used to obtain complete information\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>0x06 Summary\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article introduces the method for Minio version detection, details the development process using Python in a practical environment, and provides the open source code.\u003C\u002Fp>\u003C\u002Fbody>\u003C\u002Fhtml>","text","ltr","\u003Chtml>\u003Chead>\u003C\u002Fhead>\u003Cbody>\u003Ch2>0x00 Preface\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article will introduce methods for Minio version detection, implement automation through Python, document development details, and provide open-source code.\u003C\u002Fp>\u003Ch2>0x01 Introduction\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article will cover the following:\u003C\u002Fp>\u003Cul>\u003Cli>Implementation Approach\u003C\u002Fli>\u003Cli>Implementation Details\u003C\u002Fli>\u003Cli>Open-Source Code\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>0x02 Fundamentals\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>MinIO is a high-performance, distributed object storage system developed in Go. Minio can serve as a cloud storage solution for storing massive amounts of images, videos, and documents. Implemented in Go, the server can run on Windows, Linux, OS X, and FreeBSD, requiring only a standalone executable.\u003C\u002Fp>\u003Cp>For Windows environment setup, refer to: https:\u002F\u002Fmin.io\u002Fdocs\u002Fminio\u002Fwindows\u002Findex.html\u003C\u002Fp>\u003Ch3>1. Download\u003C\u002Fh3>\u003Cp>Latest version: https:\u002F\u002Fdl.min.io\u002Fserver\u002Fminio\u002Frelease\u002Fwindows-amd64\u002Fminio.exe\u003C\u002Fp>\u003Cp>Historical versions: https:\u002F\u002Fdl.min.io\u002Fserver\u002Fminio\u002Frelease\u002Fwindows-amd64\u002Farchive\u002F\u003C\u002Fp>\u003Cp>For historical versions, add .exe extension after download and run directly\u003C\u002Fp>\u003Ch3>2. Start the service\u003C\u002Fh3>\u003Cp>Command line parameters: minio.exe server C:\\minio --console-address :9090\u003C\u002Fp>\u003Ch3>3. Web access\u003C\u002Fh3>\u003Cp>URL address: http:\u002F\u002F127.0.0.1:9090\u003C\u002Fp>\u003Cp>Default username: minioadmin\u003C\u002Fp>\u003Cp>Default password: minioadmin\u003C\u002Fp>\u003Ch2>0x03 Implementation Approach\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>Minio version detection requires logging into the web console\u003C\u002Fp>\u003Cp>Access location: Health page, as shown below\u003C\u002Fp>\u003Cp>\u003Cimg alt=\"Alt text\" src=\"\u002Fapi\u002Fmedia\u002Ffile\u002Fdocx_image_1770015138474_0_ac742dce1b-1.png\">\u003C\u002Fp>\u003Cp>The page displays current version along with node and storage information\u003C\u002Fp>\u003Cp>In terms of program implementation, we can analyze the authentication process by capturing packets. The specific details are as follows:\u003C\u002Fp>\u003Ch3>1. Login\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Flogin\u003C\u002Fp>\u003Cp>Authentication information is passed in JSON format, with the following specific content:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>{\"accessKey\": \"minioadmin\",\"secretKey\": \"minioadmin\"}\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>After successful login, status code 204 is returned, and a Cookie: token=xxxx is added to the Header as a credential.\u003C\u002Fp>\u003Ch3>2. Read Version Information\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Fadmin\u002Finfo\u003C\u002Fp>\u003Cp>Requires Cookie: token=xxxx as a credential.\u003C\u002Fp>\u003Cp>The result is returned in JSON format, as shown in the figure below.\u003C\u002Fp>\u003Cp>\u003Cimg alt=\"Alt text\" src=\"\u002Fapi\u002Fmedia\u002Ffile\u002Fdocx_image_1770015141864_1_58b3dc1e1b-1.png\">\u003C\u002Fp>\u003Ch3>Additional: Obtain the latest version of Minio\u003C\u002Fh3>\u003Cp>Access URL: http:\u002F\u002F127.0.0.1:9090\u002Fapi\u002Fv1\u002Fcheck-version\u003C\u002Fp>\u003Ch2>0x04 Implementation Details\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Ch3>1. Login\u003C\u002Fh3>\u003Cp>An issue to consider here: the default port has been modified.\u003C\u002Fp>\u003Cp>When implementing automation with a program, port 9000 is typically used, but there are cases where the port has been changed to 9001, and a very small number of instances have the port modified to other uncommon ports.\u003C\u002Fp>\u003Cp>If the port is incorrect, it will return status code 400, with a response content example:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003C!--?xml version=\"1.0\" encoding=\"UTF-8\"?-->\u003Cbr>\u003Cerror>\u003Ccode>BadRequest\u003C\u002Fcode>\u003Cmessage>An error occurred when parsing the HTTP request POST at '\u002Fapi\u002Fv1\u002Flogin'\u003C\u002Fmessage>\u003Cresource>\u002Fapi\u002Fv1\u002Flogin\u003C\u002Fresource>\u003Crequestid>\u003C\u002Frequestid>\u003Chostid>1d119326-9fa7-4c24-b2c8-c236a17cfd35\u003C\u002Fhostid>\u003C\u002Ferror>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>Therefore, in program implementation, a check can be added here: when using the default port 9000, if specific conditions are returned, prompt that the port is incorrect, then try port 9001. If it fails again, prompt to modify the default port.\u003C\u002Fp>\u003Cp>Complete example code:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>def loginMinIO(url, username, password):\u003Cbr>    print(\"[*] Try to login:\" + url)\u003Cbr>    headers = {\u003Cbr>        \"User-Agent\": \"Mozilla\u002F5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F81.0.4044.129 Safari\u002F537.36\",\u003Cbr>        \"Content-Type\": \"application\u002Fjson\",\u003Cbr>        \"Accept-Encoding\": \"gzip, deflate\",\u003Cbr>        \"Accept-Language\": \"en-US,en;q=0.9\"\u003Cbr>    }\u003Cbr>    target = url + \"\u002Fapi\u002Fv1\u002Flogin\"\u003Cbr>    d = {\"accessKey\": username,\u003Cbr>        \"secretKey\": password,\u003Cbr>    }\u003Cbr>    try:\u003Cbr>        res = session.post(target, headers=headers, json=d, verify = False, timeout = 10)\u003Cbr>        if res.status_code == 204:\u003Cbr>            print('[+] Login Success')\u003Cbr>            print(\"    Cookie:\")\u003Cbr>            print(\"    token=\" + res.cookies['token'])\u003Cbr>            return url\u003Cbr>        else:\u003Cbr>            print('[-] Login error')\u003Cbr>            if \"An error occurred when parsing the HTTP request POST at\" in res.text and \"9000\" in url:\u003Cbr>                print(\"    Wrong port,try to use 9001\")\u003Cbr>                newurl = url.rsplit(':9000')[0] +\":9001\"\u003Cbr>                print(\"[*] Try to login:\" + newurl + \"\u002Fapi\u002Fv1\u002Flogin\")\u003Cbr>                res = session.post(newurl + \"\u002Fapi\u002Fv1\u002Flogin\", headers=headers, json=d, verify = False, timeout = 10)\u003Cbr>                if res.status_code == 204:\u003Cbr>                    print('[+] Login Success')\u003Cbr>                    print(\"    Cookie:\")\u003Cbr>                    print(\"    token=\" + res.cookies['token'])\u003Cbr>                    return newurl\u003Cbr>                else:\u003Cbr>                    print('[-] Login error')\u003Cbr>                    print(\"    Wrong port,try to use another port\")\u003Cbr>                    sys.exit(0)\u003Cbr>            else:\u003Cbr>                print(res.status_code)\u003Cbr>                print(res.text)\u003Cbr>                sys.exit(0)        \u003Cbr>    except Exception as e:\u003Cbr>        print(\"[!]\")\u003Cbr>        print(e)\u003Cbr>        sys.exit(0)\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>2. Read version information\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>The returned result is in JSON format. Example result:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>{\"advancedMetricsStatus\":\"not configured\",\"backend\":{\"backendType\":\"Erasure\"},\"servers\":[{\"commitID\":\"87cbd4126599ae825903230fdb32197204e42c22\",\"drives\":[{\"availableSpace\":33283801088,\"drivePath\":\"C:\\\\minio\",\"endpoint\":\"C:\\\\minio\",\"state\":\"ok\",\"totalSpace\":64422408192,\"usedSpace\":31138607104,\"uuid\":\"2d684591-69af-42c1-b940-ce7f4d711aa1\"}],\"endpoint\":\"127.0.0.1:9000\",\"network\":{\"127.0.0.1:9000\":\"online\"},\"state\":\"online\",\"uptime\":214,\"version\":\"2023-03-24T21:41:23Z\"}],\"widgets\":null}\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>There may be multiple servers, so traversal is required during parsing. Example code:\u003C\u002Fp>\u003Ctable>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>dictt = res.json()[\"servers\"]\u003Cbr>for k in dictt:\u003Cbr>    print(\"   +server:  \" + str(k[\"network\"]))\u003Cbr>    print(\"    state:   \" + k[\"state\"])\u003Cbr>    print(\"    uptime:  \" + str(k[\"uptime\"]))\u003Cbr>    print(\"    version: \" + k[\"version\"])\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>0x05 Open Source Code\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>The complete implementation code has been uploaded to GitHub at the following address:\u003C\u002Fp>\u003Cp>An Open Source Project\u003C\u002Fp>\u003Cp>The code supports the following two commands:\u003C\u002Fp>\u003Cul>\u003Cli>getversion: used to obtain version information\u003C\u002Fli>\u003Cli>getinfo: used to obtain complete information\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>0x06 Summary\u003C\u002Fh2>\u003Cp>---\u003C\u002Fp>\u003Cp>This article introduces the method for Minio version detection, details the development process using Python in a practical environment, and provides the open source code.\u003C\u002Fp>\u003C\u002Fbody>\u003C\u002Fhtml>",628,"Onedaysec",4,"published","2026-02-02T07:25:20.011Z",{"title":37,"description":14,"keywords":38,"ogImage":39,"canonicalUrl":39,"noIndex":40},"Minio Version Detection: Python Automation & Security Guide","Minio version detection, Python automation, penetration testing, object storage security, Minio API",null,false,[],{"docs":43,"hasNextPage":40},[44,45,4,46],936,935,933,{"title":39,"description":39,"image":39},"2026-07-24T15:37:10.731Z","2026-07-23T16:02:18.097Z","draft","2026-07-23T16:15:38.171Z"]