mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-07-07 16:24:19 +00:00
new alternative to get public IP address
This commit is contained in:
parent
038cf34219
commit
bbdeb65291
3 changed files with 42 additions and 7 deletions
|
@ -85,7 +85,10 @@ config_after_install() {
|
||||||
local existing_hasDefaultCredential=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'hasDefaultCredential: .+' | awk '{print $2}')
|
local existing_hasDefaultCredential=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'hasDefaultCredential: .+' | awk '{print $2}')
|
||||||
local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
||||||
local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
||||||
local server_ip=$(curl -s https://api.ipify.org)
|
local server_ip=$(curl -s --max-time 3 https://api.ipify.org)
|
||||||
|
if [ -z "$server_ip" ]; then
|
||||||
|
server_ip=$(curl -s --max-time 3 https://4.ident.me)
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ${#existing_webBasePath} -lt 4 ]]; then
|
if [[ ${#existing_webBasePath} -lt 4 ]]; then
|
||||||
if [[ "$existing_hasDefaultCredential" == "true" ]]; then
|
if [[ "$existing_hasDefaultCredential" == "true" ]]; then
|
||||||
|
|
|
@ -94,21 +94,34 @@ type ServerService struct {
|
||||||
inboundService InboundService
|
inboundService InboundService
|
||||||
cachedIPv4 string
|
cachedIPv4 string
|
||||||
cachedIPv6 string
|
cachedIPv6 string
|
||||||
|
noIPv6 bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPublicIP(url string) string {
|
func getPublicIP(url string) string {
|
||||||
resp, err := http.Get(url)
|
client := &http.Client{
|
||||||
|
Timeout: 3 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Get(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "N/A"
|
return "N/A"
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Don't retry if access is blocked or region-restricted
|
||||||
|
if resp.StatusCode == http.StatusForbidden || resp.StatusCode == http.StatusUnavailableForLegalReasons {
|
||||||
|
return "N/A"
|
||||||
|
}
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return "N/A"
|
||||||
|
}
|
||||||
|
|
||||||
ip, err := io.ReadAll(resp.Body)
|
ip, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "N/A"
|
return "N/A"
|
||||||
}
|
}
|
||||||
|
|
||||||
ipString := string(ip)
|
ipString := strings.TrimSpace(string(ip))
|
||||||
if ipString == "" {
|
if ipString == "" {
|
||||||
return "N/A"
|
return "N/A"
|
||||||
}
|
}
|
||||||
|
@ -221,10 +234,23 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status {
|
||||||
}
|
}
|
||||||
|
|
||||||
// IP fetching with caching
|
// IP fetching with caching
|
||||||
if s.cachedIPv4 == "" || s.cachedIPv6 == "" {
|
if s.cachedIPv4 == "" {
|
||||||
s.cachedIPv4 = getPublicIP("https://api.ipify.org")
|
s.cachedIPv4 = getPublicIP("https://api.ipify.org")
|
||||||
s.cachedIPv6 = getPublicIP("https://api6.ipify.org")
|
if s.cachedIPv4 == "N/A" {
|
||||||
|
s.cachedIPv4 = getPublicIP("https://4.ident.me")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.cachedIPv6 == "" && !s.noIPv6 {
|
||||||
|
s.cachedIPv6 = getPublicIP("https://api6.ipify.org")
|
||||||
|
if s.cachedIPv6 == "N/A" {
|
||||||
|
s.cachedIPv6 = getPublicIP("https://6.ident.me")
|
||||||
|
if s.cachedIPv6 == "N/A" {
|
||||||
|
s.noIPv6 = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
status.PublicIP.IPv4 = s.cachedIPv4
|
status.PublicIP.IPv4 = s.cachedIPv4
|
||||||
status.PublicIP.IPv6 = s.cachedIPv6
|
status.PublicIP.IPv6 = s.cachedIPv6
|
||||||
|
|
||||||
|
|
10
x-ui.sh
10
x-ui.sh
|
@ -249,7 +249,10 @@ check_config() {
|
||||||
local existing_webBasePath=$(echo "$info" | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
local existing_webBasePath=$(echo "$info" | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
||||||
local existing_port=$(echo "$info" | grep -Eo 'port: .+' | awk '{print $2}')
|
local existing_port=$(echo "$info" | grep -Eo 'port: .+' | awk '{print $2}')
|
||||||
local existing_cert=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'cert: .+' | awk '{print $2}')
|
local existing_cert=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'cert: .+' | awk '{print $2}')
|
||||||
local server_ip=$(curl -s https://api.ipify.org)
|
local server_ip=$(curl -s --max-time 3 https://api.ipify.org)
|
||||||
|
if [ -z "$server_ip" ]; then
|
||||||
|
server_ip=$(curl -s --max-time 3 https://4.ident.me)
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n "$existing_cert" ]]; then
|
if [[ -n "$existing_cert" ]]; then
|
||||||
local domain=$(basename "$(dirname "$existing_cert")")
|
local domain=$(basename "$(dirname "$existing_cert")")
|
||||||
|
@ -1630,7 +1633,10 @@ remove_iplimit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
SSH_port_forwarding() {
|
SSH_port_forwarding() {
|
||||||
local server_ip=$(curl -s https://api.ipify.org)
|
local server_ip=$(curl -s --max-time 3 https://api.ipify.org)
|
||||||
|
if [ -z "$server_ip" ]; then
|
||||||
|
server_ip=$(curl -s --max-time 3 https://4.ident.me)
|
||||||
|
fi
|
||||||
local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
||||||
local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
||||||
local existing_listenIP=$(/usr/local/x-ui/x-ui setting -getListen true | grep -Eo 'listenIP: .+' | awk '{print $2}')
|
local existing_listenIP=$(/usr/local/x-ui/x-ui setting -getListen true | grep -Eo 'listenIP: .+' | awk '{print $2}')
|
||||||
|
|
Loading…
Reference in a new issue