Skip to content

Commit 0e6a262

Browse files
committed
这是一个临时版本修改一些ipv6问题
1 parent 49cca96 commit 0e6a262

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

internal/cli/parser.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"time"
1414

1515
"github.com/projectdiscovery/fastdialer/fastdialer"
16-
1716
"github.com/xiecat/fofax/internal/fx"
1817
"github.com/xiecat/fofax/internal/fxparser"
1918
"github.com/xiecat/fofax/internal/goflags"

internal/goflags/normalized_slice.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func (normalizedStringSlice NormalizedStringSlice) String() string {
1515
return normalizedStringSlice.createStringArrayDefaultValue()
1616
}
1717

18-
//Set appends a value to the string slice.
18+
// Set appends a value to the string slice.
1919
func (normalizedStringSlice *NormalizedStringSlice) Set(value string) error {
2020
if slice, err := ToNormalizedStringSlice(value); err != nil {
2121
return err

internal/utils/fixscheme.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ import (
77
"github.com/xiecat/fofax/internal/printer"
88
)
99

10+
func FixFullHostIpv6(fullUrl string) string {
11+
if strings.Count(fullUrl, ":") > 2 && !strings.Contains(fullUrl, "[") && !strings.Contains(fullUrl, "]") {
12+
start := strings.Index(fullUrl, "://") + 3
13+
ipv6 := fullUrl[start:]
14+
return fmt.Sprintf("%s[%s]", fullUrl[0:start], ipv6)
15+
}
16+
return fullUrl
17+
}
18+
1019
func FixFullHostInfoScheme(fields []string) string {
1120
if len(fields) < 4 {
1221
printer.Errorf("fileds len err: %v", fields)
@@ -20,10 +29,10 @@ func FixFullHostInfoScheme(fields []string) string {
2029
schemaType := strings.TrimSpace(fields[3])
2130

2231
if strings.HasPrefix(schemaType, "https://") {
23-
return host
32+
return FixFullHostIpv6(host)
2433
}
2534
if strings.HasPrefix(schemaType, "http://") {
26-
return host
35+
return FixFullHostIpv6(host)
2736
}
28-
return fmt.Sprintf("%s://%s", protocol, host)
37+
return FixFullHostIpv6(fmt.Sprintf("%s://%s", protocol, host))
2938
}

internal/utils/fixurl.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package utils
22

33
import (
4+
"errors"
5+
"fmt"
46
"net/url"
57
"strings"
68
)
@@ -21,6 +23,32 @@ type FixUrl struct {
2123
ParseWithScheme bool //是否解析的时候自带scheme
2224
}
2325

26+
// is_ipv6=true && port="8080"
27+
// "https://2407:c080:17ef:ffff::7703:d86e"
28+
func FixFofaHostsHttpIpv6(ipv6URL string) (*url.URL, error) {
29+
// 提取 IPv6 地址部分
30+
start := strings.Index(ipv6URL, "://") + 3
31+
if start == -1 {
32+
return nil, errors.New("invalid host: " + ipv6URL)
33+
}
34+
ipv6 := ipv6URL[start:]
35+
36+
// 构建规范化的 IPv6 URL
37+
formattedURL := fmt.Sprintf("%s[%s]", ipv6URL[0:start], ipv6)
38+
return url.Parse(formattedURL)
39+
}
40+
41+
// "[240e:468:810:ab69:2042:7ff:fe58:881a]:8080"
42+
func FetchIpv6AndIpv4HostAndPort(uHost string) string {
43+
44+
if strings.HasPrefix(uHost, "[") {
45+
strat := strings.Index(uHost, "[") + 1
46+
end := strings.Index(uHost, "]")
47+
return "[" + uHost[strat:end] + "]"
48+
}
49+
return strings.Split(uHost, ":")[0]
50+
}
51+
2452
// NewFixUrl 归一化url格式
2553
func NewFixUrl(hostinfo string) (*FixUrl, error) {
2654
fullurl := hostinfo
@@ -29,15 +57,21 @@ func NewFixUrl(hostinfo string) (*FixUrl, error) {
2957
fullurl = "http://" + fullurl
3058
}
3159
fullurl = strings.Trim(fullurl, " \t\r\n")
32-
3360
u, err := url.Parse(fullurl)
61+
3462
if err != nil {
35-
return nil, err
63+
// "https://2407:c080:17ef:ffff::7703:d86e"
64+
65+
u, err = FixFofaHostsHttpIpv6(fullurl)
66+
if err != nil {
67+
return nil, err
68+
}
3669
}
37-
ipArray := strings.Split(u.Host, ":")
38-
ip := ipArray[0]
39-
port := u.Port()
4070

71+
//"[240e:468:810:ab69:2042:7ff:fe58:881a]:8080"
72+
ip := FetchIpv6AndIpv4HostAndPort(u.Host)
73+
port := u.Port()
74+
//ipv6 [240e:468:810:ab69:2042:7ff:fe58:881a]:8080
4175
if len(port) == 0 {
4276
if u.Scheme == "https" {
4377
port = "443"

0 commit comments

Comments
 (0)