Feature: filter Surfshark servers by hostname

This commit is contained in:
Quentin McGaw
2021-05-10 01:24:46 +00:00
parent 6c1c069261
commit eff65dce00
9 changed files with 238 additions and 175 deletions

View File

@@ -9,6 +9,10 @@ func (settings *Provider) surfsharkLines() (lines []string) {
lines = append(lines, lastIndent+"Regions: "+commaJoin(settings.ServerSelection.Regions)) lines = append(lines, lastIndent+"Regions: "+commaJoin(settings.ServerSelection.Regions))
} }
if len(settings.ServerSelection.Hostnames) > 0 {
lines = append(lines, lastIndent+"Hostnames: "+commaJoin(settings.ServerSelection.Hostnames))
}
return lines return lines
} }
@@ -30,5 +34,10 @@ func (settings *Provider) readSurfshark(r reader) (err error) {
return err return err
} }
settings.ServerSelection.Hostnames, err = r.env.CSVInside("SERVER_HOSTNAME", constants.SurfsharkHostnameChoices())
if err != nil {
return err
}
return nil return nil
} }

View File

@@ -57,8 +57,8 @@ func GetAllServers() (allServers models.AllServers) {
Servers: PurevpnServers(), Servers: PurevpnServers(),
}, },
Surfshark: models.SurfsharkServers{ Surfshark: models.SurfsharkServers{
Version: 1, Version: 2,
Timestamp: 1620435633, Timestamp: 1620607876,
Servers: SurfsharkServers(), Servers: SurfsharkServers(),
}, },
Torguard: models.TorguardServers{ Torguard: models.TorguardServers{

View File

@@ -87,7 +87,7 @@ func Test_versions(t *testing.T) {
"Surfshark": { "Surfshark": {
model: models.SurfsharkServer{}, model: models.SurfsharkServer{},
version: allServers.Surfshark.Version, version: allServers.Surfshark.Version,
digest: "042bef64", digest: "58de06d8",
}, },
"Torguard": { "Torguard": {
model: models.TorguardServer{}, model: models.TorguardServer{},
@@ -193,7 +193,7 @@ func Test_timestamps(t *testing.T) {
"Surfshark": { "Surfshark": {
servers: allServers.Surfshark.Servers, servers: allServers.Surfshark.Servers,
timestamp: allServers.Surfshark.Timestamp, timestamp: allServers.Surfshark.Timestamp,
digest: "ae560066", digest: "55669f49",
}, },
"Torguard": { "Torguard": {
servers: allServers.Torguard.Servers, servers: allServers.Torguard.Servers,

View File

@@ -21,166 +21,177 @@ func SurfsharkRegionChoices() (choices []string) {
return makeUnique(choices) return makeUnique(choices)
} }
func SurfsharkHostnameChoices() (choices []string) {
servers := SurfsharkServers()
choices = make([]string, len(servers))
for i := range servers {
choices[i] = servers[i].Hostname
}
return makeUnique(choices)
}
//nolint:lll //nolint:lll
// SurfsharkServers returns a slice of all the server information for Surfshark. // SurfsharkServers returns a slice of all the server information for Surfshark.
func SurfsharkServers() []models.SurfsharkServer { func SurfsharkServers() []models.SurfsharkServer {
return []models.SurfsharkServer{ return []models.SurfsharkServer{
{Region: "Albania", IPs: []net.IP{{31, 171, 154, 147}, {31, 171, 153, 163}, {31, 171, 155, 99}, {31, 171, 155, 101}, {31, 171, 153, 99}, {31, 171, 153, 83}}}, {Region: "Albania", Hostname: "al-tia.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{31, 171, 154, 99}, {31, 171, 153, 115}, {31, 171, 153, 131}, {31, 171, 154, 149}, {31, 171, 153, 21}, {31, 171, 153, 133}, {31, 171, 153, 99}, {31, 171, 155, 51}, {31, 171, 155, 85}, {31, 171, 155, 67}, {31, 171, 154, 165}, {31, 171, 154, 221}}},
{Region: "Argentina Buenos Aires", IPs: []net.IP{{91, 206, 168, 21}, {91, 206, 168, 50}, {91, 206, 168, 58}, {91, 206, 168, 56}}}, {Region: "Argentina Buenos Aires", Hostname: "ar-bua.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{91, 206, 168, 31}, {91, 206, 168, 72}, {91, 206, 168, 36}, {91, 206, 168, 50}, {91, 206, 168, 41}, {91, 206, 168, 54}, {91, 206, 168, 62}, {91, 206, 168, 24}, {91, 206, 168, 9}, {91, 206, 168, 70}}},
{Region: "Australia Adelaide", IPs: []net.IP{{45, 248, 79, 85}, {45, 248, 79, 53}, {45, 248, 79, 83}, {45, 248, 79, 21}, {45, 248, 79, 67}, {45, 248, 79, 27}, {45, 248, 79, 35}, {45, 248, 79, 19}}}, {Region: "Australia Adelaide", Hostname: "au-adl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 248, 79, 35}, {45, 248, 79, 53}}},
{Region: "Australia Brisbane", IPs: []net.IP{{144, 48, 39, 107}, {144, 48, 39, 69}, {144, 48, 39, 85}, {144, 48, 39, 11}}}, {Region: "Australia Brisbane", Hostname: "au-bne.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{144, 48, 39, 67}, {144, 48, 39, 13}, {144, 48, 39, 109}, {144, 48, 39, 107}, {144, 48, 39, 85}, {144, 48, 39, 131}}},
{Region: "Australia Melbourne", IPs: []net.IP{{103, 192, 80, 141}, {144, 48, 38, 141}, {103, 192, 80, 251}, {144, 48, 38, 179}}}, {Region: "Australia Melbourne", Hostname: "au-mel.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{144, 48, 38, 21}, {103, 192, 80, 235}, {103, 192, 80, 229}, {144, 48, 38, 179}, {103, 192, 80, 11}, {144, 48, 38, 181}, {103, 192, 80, 147}, {103, 192, 80, 253}, {103, 192, 80, 139}}},
{Region: "Australia Perth", IPs: []net.IP{{124, 150, 139, 27}, {45, 248, 78, 43}, {124, 150, 139, 37}, {45, 248, 78, 45}, {124, 150, 139, 35}, {124, 150, 139, 125}}}, {Region: "Australia Perth", Hostname: "au-per.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 248, 78, 45}, {124, 150, 139, 43}}},
{Region: "Australia Sydney", IPs: []net.IP{{103, 25, 59, 51}, {180, 149, 228, 173}, {180, 149, 228, 163}, {45, 125, 247, 197}, {45, 125, 247, 107}, {180, 149, 228, 115}, {45, 125, 247, 155}, {45, 125, 247, 45}}}, {Region: "Australia Sydney", Hostname: "au-syd.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 248, 76, 171}, {45, 125, 247, 197}, {45, 125, 247, 43}, {180, 149, 228, 179}, {103, 25, 59, 53}, {180, 149, 228, 163}, {180, 149, 228, 173}}},
{Region: "Australia US", IPs: []net.IP{{45, 76, 117, 108}}}, {Region: "Australia US", Hostname: "au-us.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 76, 117, 108}}},
{Region: "Austria", IPs: []net.IP{{37, 120, 212, 141}, {37, 120, 212, 133}, {89, 187, 168, 44}, {37, 120, 212, 75}}}, {Region: "Austria", Hostname: "at-vie.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 168, 39}, {89, 187, 168, 49}, {89, 187, 168, 56}, {89, 187, 168, 51}, {89, 187, 168, 46}, {37, 120, 212, 147}, {37, 120, 212, 131}, {89, 187, 168, 44}}},
{Region: "Azerbaijan", IPs: []net.IP{{62, 212, 239, 53}, {62, 212, 239, 69}}}, {Region: "Azerbaijan", Hostname: "az-bak.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{62, 212, 239, 53}, {62, 212, 239, 45}, {62, 212, 239, 67}}},
{Region: "Belgium", IPs: []net.IP{{91, 90, 123, 117}, {91, 90, 123, 219}, {91, 90, 123, 195}, {91, 90, 123, 149}}}, {Region: "Belgium", Hostname: "be-bru.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{37, 120, 218, 29}, {194, 110, 115, 69}, {194, 110, 115, 75}, {91, 90, 123, 149}, {194, 110, 115, 253}, {91, 90, 123, 157}, {91, 90, 123, 179}, {5, 253, 205, 213}}},
{Region: "Bosnia and Herzegovina", IPs: []net.IP{{185, 99, 3, 7}, {185, 99, 3, 102}, {185, 99, 3, 66}, {185, 212, 111, 6}, {185, 99, 3, 94}, {185, 99, 3, 98}, {185, 99, 3, 146}, {185, 99, 3, 205}, {185, 99, 3, 144}, {185, 99, 3, 141}, {185, 99, 3, 212}, {185, 164, 34, 250}}}, {Region: "Bosnia and Herzegovina", Hostname: "ba-sjj.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 164, 34, 250}, {185, 99, 3, 146}, {185, 212, 111, 59}, {185, 99, 3, 12}}},
{Region: "Brazil", IPs: []net.IP{{191, 96, 15, 84}, {191, 96, 13, 200}, {191, 96, 73, 216}, {191, 96, 13, 208}, {45, 231, 207, 66}, {191, 96, 73, 212}}}, {Region: "Brazil", Hostname: "br-sao.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{191, 96, 73, 210}, {191, 96, 73, 228}, {191, 96, 13, 210}, {191, 96, 13, 41}}},
{Region: "Bulgaria", IPs: []net.IP{{37, 120, 152, 37}, {217, 138, 202, 19}}}, {Region: "Bulgaria", Hostname: "bg-sof.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{37, 120, 152, 37}, {217, 138, 202, 21}, {37, 120, 152, 197}}},
{Region: "Canada Montreal", IPs: []net.IP{{91, 245, 254, 29}, {91, 245, 254, 45}, {91, 245, 254, 35}, {91, 245, 254, 125}, {91, 245, 254, 85}, {91, 245, 254, 27}}}, {Region: "Canada Montreal", Hostname: "ca-mon.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{172, 98, 82, 245}, {91, 245, 254, 75}, {91, 245, 254, 67}, {91, 245, 254, 101}, {91, 245, 254, 99}, {91, 245, 254, 77}, {91, 245, 254, 53}, {91, 245, 254, 19}, {172, 98, 82, 243}}},
{Region: "Canada Toronto", IPs: []net.IP{{104, 200, 138, 147}, {104, 200, 138, 5}, {104, 200, 138, 99}, {192, 111, 128, 138}, {104, 200, 138, 163}, {68, 71, 244, 222}}}, {Region: "Canada Toronto", Hostname: "ca-tor.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{104, 200, 138, 99}, {37, 19, 211, 27}, {104, 200, 138, 3}, {104, 200, 138, 5}, {68, 71, 244, 205}, {104, 200, 138, 152}, {162, 253, 71, 213}}},
{Region: "Canada Toronto mp001", IPs: []net.IP{{138, 197, 151, 26}}}, {Region: "Canada Toronto mp001", Hostname: "ca-tor-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{138, 197, 151, 26}}},
{Region: "Canada US", IPs: []net.IP{{159, 203, 57, 80}}}, {Region: "Canada US", Hostname: "ca-us.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{159, 203, 57, 80}}},
{Region: "Canada Vancouver", IPs: []net.IP{{66, 115, 147, 89}, {198, 8, 92, 89}, {107, 181, 177, 183}, {198, 8, 92, 84}}}, {Region: "Canada Vancouver", Hostname: "ca-van.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{66, 115, 147, 82}, {172, 83, 40, 147}, {208, 78, 41, 195}, {107, 181, 177, 183}, {66, 115, 147, 92}, {66, 115, 147, 89}, {66, 115, 147, 74}, {198, 8, 92, 87}, {198, 8, 92, 82}, {104, 200, 132, 37}, {208, 78, 41, 197}}},
{Region: "Chile", IPs: []net.IP{{31, 169, 121, 5}, {31, 169, 121, 3}}}, {Region: "Chile", Hostname: "cl-san.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{31, 169, 121, 3}, {31, 169, 121, 5}}},
{Region: "Colombia", IPs: []net.IP{{45, 129, 32, 32}, {45, 129, 32, 3}}}, {Region: "Colombia", Hostname: "co-bog.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 129, 32, 10}, {45, 129, 32, 3}, {45, 129, 32, 5}, {45, 129, 32, 36}, {45, 129, 32, 22}, {45, 129, 32, 38}, {45, 129, 32, 13}}},
{Region: "Costa Rica", IPs: []net.IP{{176, 227, 241, 29}, {176, 227, 241, 33}, {176, 227, 241, 19}, {176, 227, 241, 26}, {176, 227, 241, 21}}}, {Region: "Costa Rica", Hostname: "cr-sjn.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{176, 227, 241, 19}, {176, 227, 241, 35}, {176, 227, 241, 21}, {176, 227, 241, 31}, {176, 227, 241, 29}, {176, 227, 241, 33}}},
{Region: "Croatia", IPs: []net.IP{{89, 164, 99, 134}, {176, 222, 34, 113}, {85, 10, 50, 166}, {85, 10, 56, 225}}}, {Region: "Croatia", Hostname: "hr-zag.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 164, 99, 109}, {89, 164, 99, 111}, {85, 10, 56, 225}, {176, 222, 34, 121}}},
{Region: "Cyprus", IPs: []net.IP{{195, 47, 194, 101}, {195, 47, 194, 91}, {195, 47, 194, 93}, {195, 47, 194, 54}, {195, 47, 194, 81}, {195, 47, 194, 83}}}, {Region: "Cyprus", Hostname: "cy-nic.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{195, 47, 194, 59}, {195, 47, 194, 56}, {195, 47, 194, 91}, {195, 47, 194, 42}, {195, 47, 194, 61}, {195, 47, 194, 95}}},
{Region: "Czech Republic", IPs: []net.IP{{185, 152, 64, 151}, {193, 9, 112, 183}, {217, 138, 220, 163}, {217, 138, 220, 187}, {217, 138, 220, 139}, {217, 138, 220, 189}, {217, 138, 220, 165}, {193, 9, 112, 195}}}, {Region: "Czech Republic", Hostname: "cz-prg.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 180, 14, 149}, {193, 9, 112, 199}, {217, 138, 220, 187}, {217, 138, 220, 125}, {193, 9, 112, 179}, {217, 138, 220, 147}, {217, 138, 220, 165}, {193, 9, 112, 183}, {193, 9, 112, 195}, {185, 152, 64, 151}, {217, 138, 220, 173}, {217, 138, 220, 189}}},
{Region: "Denmark", IPs: []net.IP{{193, 29, 107, 179}, {45, 12, 221, 163}, {37, 120, 194, 165}, {193, 29, 107, 197}}}, {Region: "Denmark", Hostname: "dk-cph.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{193, 29, 107, 125}, {193, 29, 107, 229}, {37, 120, 194, 101}, {193, 29, 107, 197}, {37, 120, 194, 123}, {45, 12, 221, 179}, {193, 29, 107, 203}, {37, 120, 194, 165}, {89, 45, 7, 53}, {193, 29, 107, 163}, {2, 58, 46, 3}, {193, 29, 107, 109}}},
{Region: "Estonia", IPs: []net.IP{{185, 174, 159, 136}, {165, 231, 163, 3}, {185, 174, 159, 53}, {165, 231, 163, 5}}}, {Region: "Estonia", Hostname: "ee-tll.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 174, 159, 133}, {165, 231, 163, 5}}},
{Region: "Finland", IPs: []net.IP{{196, 244, 191, 91}, {196, 244, 191, 107}}}, {Region: "Finland", Hostname: "fi-hel.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{196, 244, 191, 109}, {196, 244, 191, 181}, {196, 244, 191, 99}, {196, 244, 191, 35}, {196, 244, 191, 45}, {196, 244, 191, 37}, {196, 244, 191, 179}, {196, 244, 191, 91}}},
{Region: "France Bordeaux", IPs: []net.IP{{185, 108, 106, 102}, {185, 108, 106, 182}, {185, 108, 106, 148}, {185, 108, 106, 74}, {185, 108, 106, 51}, {185, 108, 106, 154}, {185, 108, 106, 144}}}, {Region: "France Bordeaux", Hostname: "fr-bod.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 108, 106, 164}, {185, 108, 106, 53}, {185, 108, 106, 100}, {185, 108, 106, 154}, {185, 108, 106, 188}, {185, 108, 106, 156}, {185, 108, 106, 158}, {185, 108, 106, 74}, {185, 108, 106, 89}, {185, 108, 106, 182}}},
{Region: "France Marseilles", IPs: []net.IP{{185, 166, 84, 95}, {185, 166, 84, 85}, {185, 166, 84, 53}, {185, 166, 84, 77}}}, {Region: "France Marseilles", Hostname: "fr-mrs.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 166, 84, 91}, {138, 199, 16, 137}, {185, 166, 84, 31}, {185, 166, 84, 17}, {185, 166, 84, 81}, {185, 166, 84, 87}, {185, 166, 84, 79}, {185, 166, 84, 29}}},
{Region: "France Paris", IPs: []net.IP{{143, 244, 57, 71}, {143, 244, 57, 103}, {143, 244, 57, 119}, {143, 244, 57, 117}, {217, 138, 207, 251}, {217, 138, 207, 245}, {45, 83, 90, 181}, {45, 89, 174, 85}}}, {Region: "France Paris", Hostname: "fr-par.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{143, 244, 57, 91}, {217, 138, 207, 245}, {84, 247, 51, 235}, {143, 244, 57, 97}, {143, 244, 57, 68}, {143, 244, 57, 110}, {143, 244, 56, 228}, {143, 244, 57, 101}, {143, 244, 57, 83}, {143, 244, 57, 75}, {143, 244, 57, 73}, {143, 244, 57, 93}, {45, 89, 174, 83}}},
{Region: "France Sweden", IPs: []net.IP{{199, 247, 8, 20}}}, {Region: "France Sweden", Hostname: "fr-se.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{199, 247, 8, 20}}},
{Region: "Germany Berlin", IPs: []net.IP{{193, 29, 106, 5}, {193, 29, 106, 117}, {89, 36, 76, 69}, {193, 29, 106, 13}, {217, 138, 216, 219}, {193, 29, 106, 139}, {193, 29, 106, 67}, {152, 89, 163, 23}}}, {Region: "Germany Berlin", Hostname: "de-ber.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{193, 29, 106, 5}, {89, 36, 76, 69}, {217, 138, 216, 237}, {217, 138, 216, 245}, {152, 89, 163, 245}, {193, 29, 106, 75}, {193, 29, 106, 43}, {193, 29, 106, 61}, {193, 29, 106, 195}, {37, 120, 217, 133}}},
{Region: "Germany Frankfurt am Main", IPs: []net.IP{{138, 199, 19, 162}, {138, 199, 19, 169}, {156, 146, 33, 85}, {138, 199, 19, 137}, {156, 146, 33, 67}, {138, 199, 19, 190}}}, {Region: "Germany Frankfurt am Main", Hostname: "de-fra.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 102, 219, 49}, {156, 146, 33, 75}, {45, 87, 212, 213}, {37, 120, 196, 171}, {138, 199, 19, 144}, {156, 146, 33, 85}}},
{Region: "Germany Frankfurt am Main st001", IPs: []net.IP{{45, 87, 212, 179}}}, {Region: "Germany Frankfurt am Main st001", Hostname: "de-fra-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 212, 179}}},
{Region: "Germany Frankfurt am Main st002", IPs: []net.IP{{45, 87, 212, 181}}}, {Region: "Germany Frankfurt am Main st002", Hostname: "de-fra-st002.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 212, 181}}},
{Region: "Germany Frankfurt am Main st003", IPs: []net.IP{{45, 87, 212, 183}}}, {Region: "Germany Frankfurt am Main st003", Hostname: "de-fra-st003.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 212, 183}}},
{Region: "Germany Frankfurt am Main st004", IPs: []net.IP{{195, 181, 174, 226}}}, {Region: "Germany Frankfurt am Main st004", Hostname: "de-fra-st004.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{195, 181, 174, 226}}},
{Region: "Germany Frankfurt am Main st005", IPs: []net.IP{{195, 181, 174, 228}}}, {Region: "Germany Frankfurt am Main st005", Hostname: "de-fra-st005.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{195, 181, 174, 228}}},
{Region: "Germany Frankfurt mp001", IPs: []net.IP{{46, 101, 189, 14}}}, {Region: "Germany Frankfurt mp001", Hostname: "de-fra-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{46, 101, 189, 14}}},
{Region: "Germany Munich", IPs: []net.IP{{79, 143, 191, 141}, {79, 143, 191, 231}}}, {Region: "Germany Munich", Hostname: "de-muc.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{79, 143, 191, 231}, {213, 136, 64, 21}}},
{Region: "Germany Nuremberg", IPs: []net.IP{{144, 91, 123, 50}, {62, 171, 151, 160}, {144, 91, 123, 52}, {62, 171, 151, 158}}}, {Region: "Germany Nuremberg", Hostname: "de-nue.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{144, 91, 123, 52}, {62, 171, 151, 158}, {144, 91, 123, 50}, {62, 171, 151, 160}}},
{Region: "Germany Singapour", IPs: []net.IP{{159, 89, 14, 157}}}, {Region: "Germany Singapour", Hostname: "de-sg.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{159, 89, 14, 157}}},
{Region: "Germany UK", IPs: []net.IP{{46, 101, 250, 73}}}, {Region: "Greece", Hostname: "gr-ath.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{194, 150, 167, 50}, {194, 150, 167, 32}, {194, 150, 167, 38}, {194, 150, 167, 34}}},
{Region: "Greece", IPs: []net.IP{{194, 150, 167, 42}, {194, 150, 167, 30}, {194, 150, 167, 28}, {194, 150, 167, 52}, {194, 150, 167, 48}, {194, 150, 167, 44}, {194, 150, 167, 50}, {194, 150, 167, 34}}}, {Region: "Hong Kong", Hostname: "hk-hkg.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{212, 102, 42, 199}, {212, 102, 42, 196}, {212, 102, 42, 211}, {84, 17, 37, 160}, {84, 17, 57, 71}, {212, 102, 42, 194}}},
{Region: "Hong Kong", IPs: []net.IP{{84, 17, 57, 68}, {84, 17, 57, 71}, {84, 17, 37, 158}, {212, 102, 42, 209}, {84, 17, 57, 66}, {212, 102, 42, 199}}}, {Region: "Hungary", Hostname: "hu-bud.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{37, 120, 144, 197}, {37, 120, 144, 149}, {37, 120, 144, 151}, {37, 120, 144, 215}, {37, 120, 144, 199}, {37, 120, 144, 245}, {37, 120, 144, 243}, {37, 120, 144, 211}, {37, 120, 144, 195}}},
{Region: "Hungary", IPs: []net.IP{{37, 120, 144, 213}, {37, 120, 144, 147}, {37, 120, 144, 149}, {37, 120, 144, 197}}}, {Region: "Iceland", Hostname: "is-rkv.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 133, 193, 219}, {45, 133, 193, 221}, {45, 133, 193, 213}, {45, 133, 193, 117}, {45, 133, 193, 107}, {45, 133, 193, 109}, {45, 133, 193, 115}, {45, 133, 193, 211}}},
{Region: "Iceland", IPs: []net.IP{{45, 133, 193, 213}, {45, 133, 193, 107}, {45, 133, 193, 211}, {45, 133, 193, 109}, {45, 133, 193, 219}, {45, 133, 193, 115}}}, {Region: "India Chennai", Hostname: "in-chn.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{103, 94, 27, 99}, {103, 108, 117, 151}, {103, 94, 27, 117}, {103, 94, 27, 179}, {103, 94, 27, 229}}},
{Region: "India Chennai", IPs: []net.IP{{103, 94, 27, 117}, {103, 108, 117, 151}, {103, 94, 27, 179}, {103, 94, 27, 101}}}, {Region: "India Indore", Hostname: "in-idr.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{103, 39, 132, 187}, {103, 39, 134, 61}}},
{Region: "India Indore", IPs: []net.IP{{103, 39, 132, 187}, {103, 39, 134, 59}}}, {Region: "India Mumbai", Hostname: "in-mum.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{165, 231, 253, 163}, {103, 156, 51, 57}, {103, 156, 51, 8}, {103, 156, 50, 87}}},
{Region: "India Mumbai", IPs: []net.IP{{103, 156, 50, 87}, {103, 156, 51, 66}, {103, 156, 50, 91}, {103, 156, 51, 57}, {103, 156, 50, 103}, {103, 156, 51, 39}, {103, 156, 51, 26}, {103, 156, 50, 85}}}, {Region: "India UK", Hostname: "in-uk.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{134, 209, 148, 122}}},
{Region: "Indonesia", IPs: []net.IP{{103, 120, 66, 229}, {103, 120, 66, 236}, {103, 148, 242, 168}, {103, 120, 66, 234}, {103, 120, 66, 221}}}, {Region: "Indonesia", Hostname: "id-jak.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{103, 120, 66, 216}, {103, 148, 242, 170}, {103, 120, 66, 229}, {103, 120, 66, 219}}},
{Region: "Ireland", IPs: []net.IP{{37, 120, 235, 67}, {217, 138, 222, 53}, {185, 108, 128, 181}, {5, 157, 13, 125}}}, {Region: "Ireland", Hostname: "ie-dub.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 108, 128, 114}, {5, 157, 13, 83}, {5, 157, 13, 125}, {185, 108, 128, 183}, {185, 108, 128, 120}, {217, 138, 222, 53}, {5, 157, 13, 91}, {37, 120, 235, 69}}},
{Region: "Israel", IPs: []net.IP{{87, 239, 255, 109}, {87, 239, 255, 119}, {87, 239, 255, 114}}}, {Region: "Israel", Hostname: "il-tlv.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{87, 239, 255, 109}, {87, 239, 255, 119}}},
{Region: "Italy Milan", IPs: []net.IP{{84, 17, 58, 150}, {37, 120, 201, 69}, {84, 17, 58, 159}, {84, 17, 58, 205}, {84, 17, 58, 197}, {84, 17, 58, 134}, {37, 120, 201, 67}, {84, 17, 58, 148}}}, {Region: "Italy Milan", Hostname: "it-mil.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 128, 27, 37}, {84, 17, 58, 136}, {45, 9, 251, 163}, {45, 9, 251, 165}, {212, 102, 54, 152}, {37, 120, 201, 23}, {212, 102, 54, 182}, {212, 102, 54, 143}, {212, 102, 54, 180}, {37, 120, 201, 69}, {37, 120, 201, 67}, {84, 17, 58, 166}}},
{Region: "Italy Rome", IPs: []net.IP{{217, 138, 219, 229}, {82, 102, 26, 51}, {37, 120, 207, 117}, {185, 217, 71, 187}}}, {Region: "Italy Rome", Hostname: "it-rom.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 217, 71, 227}, {37, 120, 207, 3}}},
{Region: "Japan Tokyo", IPs: []net.IP{{84, 17, 34, 26}, {138, 199, 22, 130}, {138, 199, 22, 139}, {138, 199, 22, 132}, {89, 187, 161, 22}, {138, 199, 22, 135}}}, {Region: "Japan Tokyo", Hostname: "jp-tok.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{138, 199, 22, 139}, {89, 187, 161, 22}, {138, 199, 22, 141}, {89, 187, 161, 2}, {84, 17, 34, 46}, {89, 187, 161, 241}, {89, 187, 161, 4}, {138, 199, 22, 143}}},
{Region: "Japan Tokyo st001", IPs: []net.IP{{45, 87, 213, 19}}}, {Region: "Japan Tokyo st001", Hostname: "jp-tok-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 213, 19}}},
{Region: "Japan Tokyo st002", IPs: []net.IP{{45, 87, 213, 21}}}, {Region: "Japan Tokyo st002", Hostname: "jp-tok-st002.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 213, 21}}},
{Region: "Japan Tokyo st003", IPs: []net.IP{{45, 87, 213, 23}}}, {Region: "Japan Tokyo st003", Hostname: "jp-tok-st003.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 87, 213, 23}}},
{Region: "Japan Tokyo st004", IPs: []net.IP{{217, 138, 212, 19}}}, {Region: "Japan Tokyo st004", Hostname: "jp-tok-st004.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 138, 212, 19}}},
{Region: "Japan Tokyo st005", IPs: []net.IP{{217, 138, 212, 21}}}, {Region: "Japan Tokyo st005", Hostname: "jp-tok-st005.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 138, 212, 21}}},
{Region: "Japan Tokyo st006", IPs: []net.IP{{82, 102, 28, 123}}}, {Region: "Japan Tokyo st006", Hostname: "jp-tok-st006.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{82, 102, 28, 123}}},
{Region: "Japan Tokyo st007", IPs: []net.IP{{82, 102, 28, 125}}}, {Region: "Japan Tokyo st007", Hostname: "jp-tok-st007.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{82, 102, 28, 125}}},
{Region: "Japan Tokyo st008", IPs: []net.IP{{89, 187, 161, 12}}}, {Region: "Japan Tokyo st008", Hostname: "jp-tok-st008.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 12}}},
{Region: "Japan Tokyo st009", IPs: []net.IP{{89, 187, 161, 14}}}, {Region: "Japan Tokyo st009", Hostname: "jp-tok-st009.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 14}}},
{Region: "Japan Tokyo st010", IPs: []net.IP{{89, 187, 161, 17}}}, {Region: "Japan Tokyo st010", Hostname: "jp-tok-st010.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 17}}},
{Region: "Japan Tokyo st011", IPs: []net.IP{{89, 187, 161, 19}}}, {Region: "Japan Tokyo st011", Hostname: "jp-tok-st011.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 19}}},
{Region: "Japan Tokyo st012", IPs: []net.IP{{89, 187, 161, 7}}}, {Region: "Japan Tokyo st012", Hostname: "jp-tok-st012.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 7}}},
{Region: "Japan Tokyo st013", IPs: []net.IP{{89, 187, 161, 9}}}, {Region: "Japan Tokyo st013", Hostname: "jp-tok-st013.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 161, 9}}},
{Region: "Kazakhstan", IPs: []net.IP{{5, 189, 202, 9}, {5, 189, 202, 11}}}, {Region: "Kazakhstan", Hostname: "kz-ura.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{5, 189, 202, 9}, {5, 189, 202, 11}}},
{Region: "Korea", IPs: []net.IP{{45, 130, 137, 38}, {45, 130, 137, 28}, {45, 130, 137, 3}, {45, 130, 137, 26}, {27, 255, 77, 197}, {45, 130, 137, 18}, {45, 130, 137, 40}, {45, 130, 137, 48}, {45, 130, 137, 10}, {45, 130, 137, 50}}}, {Region: "Korea", Hostname: "kr-seo.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 130, 137, 44}, {45, 130, 137, 32}, {45, 130, 137, 5}, {45, 130, 137, 18}}},
{Region: "Latvia", IPs: []net.IP{{188, 92, 78, 137}, {188, 92, 78, 147}, {188, 92, 78, 208}, {188, 92, 78, 145}, {91, 203, 69, 146}, {188, 92, 78, 205}, {188, 92, 78, 140}, {188, 92, 78, 203}}}, {Region: "Latvia", Hostname: "lv-rig.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{91, 203, 69, 178}, {188, 92, 78, 147}, {188, 92, 78, 137}}},
{Region: "Luxembourg", IPs: []net.IP{{185, 153, 151, 144}, {185, 153, 151, 98}, {185, 153, 151, 118}, {185, 153, 151, 104}, {185, 153, 151, 106}, {185, 153, 151, 94}, {185, 153, 151, 142}, {185, 153, 151, 108}, {185, 153, 151, 134}, {185, 153, 151, 87}, {185, 153, 151, 102}}}, {Region: "Luxembourg", Hostname: "lu-ste.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 153, 151, 148}, {185, 153, 151, 134}, {185, 153, 151, 98}, {185, 153, 151, 62}}},
{Region: "Malaysia", IPs: []net.IP{{42, 0, 30, 164}, {42, 0, 30, 162}, {42, 0, 30, 179}, {42, 0, 30, 213}}}, {Region: "Malaysia", Hostname: "my-kul.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{42, 0, 30, 209}, {42, 0, 30, 177}, {111, 90, 141, 52}, {111, 90, 141, 33}}},
{Region: "Mexico City Mexico", IPs: []net.IP{{194, 41, 112, 26}, {194, 41, 112, 39}, {194, 41, 112, 5}, {194, 41, 112, 21}, {194, 41, 112, 28}, {194, 41, 112, 24}}}, {Region: "Mexico City Mexico", Hostname: "mx-mex.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{194, 41, 112, 11}, {194, 41, 112, 39}, {194, 41, 112, 33}, {194, 41, 112, 24}, {194, 41, 112, 19}, {194, 41, 112, 35}, {194, 41, 112, 9}, {194, 41, 112, 26}, {194, 41, 112, 21}}},
{Region: "Moldova", IPs: []net.IP{{194, 33, 40, 114}, {194, 33, 40, 112}}}, {Region: "Moldova", Hostname: "md-chi.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{194, 33, 40, 114}, {178, 175, 128, 237}, {178, 175, 128, 235}, {194, 33, 40, 112}}},
{Region: "Netherlands Amsterdam", IPs: []net.IP{{89, 46, 223, 189}, {89, 46, 223, 56}, {81, 19, 208, 56}, {89, 46, 223, 82}, {81, 19, 209, 113}, {81, 19, 208, 91}, {89, 46, 223, 54}, {81, 19, 209, 55}}}, {Region: "Netherlands Amsterdam", Hostname: "nl-ams.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{143, 244, 42, 86}, {143, 244, 42, 74}, {89, 46, 223, 90}, {89, 187, 174, 229}, {143, 244, 42, 91}, {89, 46, 223, 183}, {89, 46, 223, 190}, {143, 244, 42, 69}}},
{Region: "Netherlands Amsterdam mp001", IPs: []net.IP{{188, 166, 43, 117}}}, {Region: "Netherlands Amsterdam mp001", Hostname: "nl-ams-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{188, 166, 43, 117}}},
{Region: "Netherlands Amsterdam st001", IPs: []net.IP{{81, 19, 209, 51}}}, {Region: "Netherlands Amsterdam st001", Hostname: "nl-ams-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{81, 19, 209, 51}}},
{Region: "New Zealand", IPs: []net.IP{{180, 149, 231, 69}, {180, 149, 231, 119}, {180, 149, 231, 43}}}, {Region: "Netherlands US", Hostname: "nl-us.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{188, 166, 98, 91}}},
{Region: "Nigeria", IPs: []net.IP{{102, 165, 23, 6}, {102, 165, 23, 40}, {102, 165, 23, 4}, {102, 165, 23, 44}}}, {Region: "New Zealand", Hostname: "nz-akl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{180, 149, 231, 11}, {180, 149, 231, 5}, {180, 149, 231, 13}, {180, 149, 231, 115}}},
{Region: "North Macedonia", IPs: []net.IP{{185, 225, 28, 101}, {185, 225, 28, 67}, {185, 225, 28, 83}, {185, 225, 28, 245}, {185, 225, 28, 99}, {185, 225, 28, 107}}}, {Region: "Nigeria", Hostname: "ng-lag.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{102, 165, 23, 40}, {102, 165, 23, 42}, {102, 165, 23, 4}, {102, 165, 23, 38}, {102, 165, 23, 6}}},
{Region: "Norway", IPs: []net.IP{{84, 247, 50, 27}, {91, 219, 215, 51}, {45, 12, 223, 213}, {45, 12, 223, 197}, {45, 12, 223, 211}, {91, 219, 215, 37}}}, {Region: "North Macedonia", Hostname: "mk-skp.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 225, 28, 69}, {185, 225, 28, 107}, {185, 225, 28, 101}, {185, 225, 28, 99}, {185, 225, 28, 93}, {185, 225, 28, 67}}},
{Region: "Paraguay", IPs: []net.IP{{181, 40, 18, 59}, {186, 16, 32, 163}}}, {Region: "Norway", Hostname: "no-osl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{91, 219, 215, 85}, {84, 247, 50, 29}, {91, 219, 215, 51}, {45, 12, 223, 69}, {95, 174, 66, 37}, {91, 219, 215, 19}, {95, 174, 66, 35}, {84, 247, 50, 67}}},
{Region: "Philippines", IPs: []net.IP{{45, 134, 224, 20}, {45, 134, 224, 3}, {45, 134, 224, 13}, {45, 134, 224, 10}}}, {Region: "Paraguay", Hostname: "py-asu.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{186, 16, 32, 173}, {186, 16, 32, 168}}},
{Region: "Poland Gdansk", IPs: []net.IP{{5, 187, 53, 55}, {5, 187, 53, 51}, {37, 28, 156, 117}, {5, 187, 53, 53}}}, {Region: "Philippines", Hostname: "ph-mnl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 134, 224, 13}, {45, 134, 224, 15}, {45, 134, 224, 8}, {45, 134, 224, 3}}},
{Region: "Poland Warsaw", IPs: []net.IP{{185, 246, 208, 107}, {185, 246, 208, 182}, {5, 253, 206, 71}, {5, 253, 206, 227}, {5, 253, 206, 229}, {138, 199, 17, 132}}}, {Region: "Poland Gdansk", Hostname: "pl-gdn.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{5, 187, 53, 53}, {178, 255, 45, 187}, {5, 133, 14, 196}, {5, 187, 53, 51}}},
{Region: "Portugal Lisbon", IPs: []net.IP{{91, 205, 230, 154}, {91, 205, 230, 158}, {5, 154, 174, 219}, {91, 205, 230, 152}}}, {Region: "Poland Warsaw", Hostname: "pl-waw.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 246, 208, 105}, {138, 199, 17, 130}, {5, 253, 206, 227}, {138, 199, 17, 132}, {185, 246, 208, 72}, {185, 246, 208, 77}}},
{Region: "Portugal Porto", IPs: []net.IP{{194, 39, 127, 153}, {194, 39, 127, 183}, {194, 39, 127, 181}, {194, 39, 127, 163}, {194, 39, 127, 161}}}, {Region: "Portugal Lisbon", Hostname: "pt-lis.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{91, 205, 230, 160}, {91, 205, 230, 154}, {5, 154, 174, 179}, {5, 154, 174, 187}}},
{Region: "Romania", IPs: []net.IP{{185, 102, 217, 161}, {185, 102, 217, 196}, {185, 102, 217, 159}, {185, 102, 217, 167}}}, {Region: "Portugal Porto", Hostname: "pt-opo.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{194, 39, 127, 23}, {194, 39, 127, 36}, {194, 39, 127, 171}}},
{Region: "Russia Moscow", IPs: []net.IP{{92, 38, 138, 112}, {92, 38, 138, 118}}}, {Region: "Romania", Hostname: "ro-buc.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 102, 217, 196}, {185, 102, 217, 155}}},
{Region: "Serbia", IPs: []net.IP{{37, 120, 193, 53}, {152, 89, 160, 115}}}, {Region: "Russia Moscow", Hostname: "ru-mos.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{92, 38, 138, 118}, {92, 38, 138, 112}}},
{Region: "Singapore", IPs: []net.IP{{89, 187, 163, 134}, {89, 187, 163, 212}, {156, 146, 56, 137}, {89, 187, 163, 197}, {89, 187, 163, 200}, {89, 187, 163, 195}, {89, 187, 163, 215}, {89, 187, 163, 207}, {89, 187, 162, 184}, {156, 146, 56, 132}}}, {Region: "Serbia", Hostname: "rs-beg.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{152, 89, 160, 213}}},
{Region: "Singapore in", IPs: []net.IP{{128, 199, 193, 35}}}, {Region: "Singapore", Hostname: "sg-sng.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{156, 146, 56, 135}, {89, 187, 163, 134}, {89, 187, 163, 197}, {156, 146, 56, 132}, {89, 187, 163, 130}, {89, 187, 163, 217}}},
{Region: "Singapore mp001", IPs: []net.IP{{206, 189, 94, 229}}}, {Region: "Singapore Hong Kong", Hostname: "sg-hk.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{206, 189, 83, 129}}},
{Region: "Singapore st001", IPs: []net.IP{{217, 138, 201, 91}}}, {Region: "Singapore Netherlands", Hostname: "sg-nl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{104, 248, 148, 18}}},
{Region: "Singapore st002", IPs: []net.IP{{217, 138, 201, 93}}}, {Region: "Singapore in", Hostname: "sg-in.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{128, 199, 193, 35}}},
{Region: "Singapore st003", IPs: []net.IP{{84, 247, 49, 19}}}, {Region: "Singapore mp001", Hostname: "sg-sng-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{206, 189, 94, 229}}},
{Region: "Singapore st004", IPs: []net.IP{{84, 247, 49, 21}}}, {Region: "Singapore st001", Hostname: "sg-sng-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 138, 201, 91}}},
{Region: "Slovekia", IPs: []net.IP{{185, 76, 8, 212}, {185, 76, 8, 217}, {37, 120, 221, 5}, {185, 76, 8, 210}}}, {Region: "Singapore st002", Hostname: "sg-sng-st002.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 138, 201, 93}}},
{Region: "Slovenia", IPs: []net.IP{{195, 158, 249, 46}, {195, 158, 249, 38}, {195, 158, 249, 40}, {195, 158, 249, 36}}}, {Region: "Singapore st003", Hostname: "sg-sng-st003.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{84, 247, 49, 19}}},
{Region: "South Africa", IPs: []net.IP{{154, 127, 49, 232}, {154, 127, 50, 140}, {102, 165, 47, 130}, {102, 165, 47, 140}, {102, 165, 47, 134}, {154, 127, 49, 226}, {154, 16, 93, 51}}}, {Region: "Singapore st004", Hostname: "sg-sng-st004.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{84, 247, 49, 21}}},
{Region: "Spain Barcelona", IPs: []net.IP{{185, 188, 61, 33}, {185, 188, 61, 61}, {185, 188, 61, 21}, {37, 120, 142, 123}, {37, 120, 142, 131}, {82, 102, 26, 147}}}, {Region: "Slovekia", Hostname: "sk-bts.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{37, 120, 221, 3}, {193, 37, 255, 41}, {37, 120, 221, 5}, {185, 76, 8, 217}, {193, 37, 255, 37}, {193, 37, 255, 35}}},
{Region: "Spain Madrid", IPs: []net.IP{{82, 102, 17, 179}, {188, 208, 141, 20}, {188, 208, 141, 34}, {89, 37, 95, 23}, {84, 17, 62, 181}, {89, 37, 95, 17}, {84, 17, 62, 165}}}, {Region: "Slovenia", Hostname: "si-lju.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{195, 158, 249, 42}, {195, 158, 249, 46}, {195, 158, 249, 38}, {195, 158, 249, 36}, {195, 158, 249, 48}, {195, 158, 249, 52}}},
{Region: "Spain Valencia", IPs: []net.IP{{185, 153, 150, 74}, {196, 196, 150, 67}, {196, 196, 150, 99}}}, {Region: "South Africa", Hostname: "za-jnb.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{154, 16, 93, 53}, {102, 165, 47, 130}, {154, 127, 50, 138}, {154, 127, 49, 226}, {102, 165, 47, 134}, {102, 165, 47, 132}}},
{Region: "Sweden", IPs: []net.IP{{185, 76, 9, 39}, {45, 83, 91, 147}, {45, 83, 91, 149}, {185, 76, 9, 55}}}, {Region: "Spain Barcelona", Hostname: "es-bcn.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 188, 61, 57}, {185, 188, 61, 13}, {37, 120, 142, 125}, {185, 188, 61, 45}, {185, 188, 61, 15}, {185, 188, 61, 5}, {185, 188, 61, 21}, {37, 120, 142, 131}, {185, 216, 32, 61}, {185, 188, 61, 65}, {185, 188, 61, 41}}},
{Region: "Switzerland", IPs: []net.IP{{84, 17, 53, 216}, {45, 12, 222, 245}, {156, 146, 62, 49}, {84, 17, 53, 208}}}, {Region: "Spain Madrid", Hostname: "es-mad.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{212, 102, 48, 2}, {89, 37, 95, 17}, {212, 102, 48, 15}, {84, 17, 62, 179}}},
{Region: "Taiwan", IPs: []net.IP{{103, 152, 151, 85}, {2, 58, 241, 29}, {2, 58, 241, 149}, {103, 152, 151, 19}, {103, 152, 151, 67}, {2, 58, 241, 27}}}, {Region: "Spain Valencia", Hostname: "es-vlc.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 153, 150, 46}, {185, 153, 150, 50}, {196, 196, 150, 67}, {185, 153, 150, 72}, {185, 153, 150, 63}}},
{Region: "Thailand", IPs: []net.IP{{27, 131, 138, 176}}}, {Region: "Sweden", Hostname: "se-sto.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 83, 91, 131}, {185, 76, 9, 57}, {185, 76, 9, 44}, {185, 76, 9, 51}}},
{Region: "Turkey Istanbul", IPs: []net.IP{{107, 150, 94, 45}, {107, 150, 94, 29}, {107, 150, 94, 43}, {107, 150, 94, 21}}}, {Region: "Switzerland", Hostname: "ch-zur.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{156, 146, 62, 54}, {84, 17, 53, 168}, {84, 17, 53, 227}, {84, 17, 53, 219}, {156, 146, 62, 44}, {156, 146, 62, 46}, {37, 120, 213, 3}, {156, 146, 62, 49}}},
{Region: "UK Germany", IPs: []net.IP{{45, 77, 58, 16}}}, {Region: "Taiwan", Hostname: "tw-tai.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{2, 58, 241, 5}, {2, 58, 241, 27}, {2, 58, 241, 131}, {103, 152, 151, 19}, {2, 58, 242, 155}, {103, 152, 151, 21}}},
{Region: "UK Glasgow", IPs: []net.IP{{185, 108, 105, 247}, {185, 108, 105, 239}, {185, 108, 105, 207}, {185, 108, 105, 31}, {185, 108, 105, 186}, {185, 108, 105, 237}}}, {Region: "Thailand", Hostname: "th-bkk.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{27, 131, 138, 176}, {27, 131, 138, 174}}},
{Region: "UK London", IPs: []net.IP{{185, 16, 206, 69}, {185, 141, 206, 206}, {185, 44, 77, 60}, {89, 34, 96, 86}, {81, 19, 223, 189}, {86, 106, 157, 214}}}, {Region: "Turkey Istanbul", Hostname: "tr-ist.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{107, 150, 94, 45}, {107, 150, 94, 29}, {107, 150, 94, 43}, {107, 150, 94, 21}}},
{Region: "UK London mp001", IPs: []net.IP{{206, 189, 119, 92}}}, {Region: "UK France", Hostname: "uk-fr.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{188, 166, 168, 247}}},
{Region: "UK London st001", IPs: []net.IP{{217, 146, 82, 83}}}, {Region: "UK Germany", Hostname: "uk-de.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 77, 58, 16}}},
{Region: "UK London st002", IPs: []net.IP{{185, 134, 22, 80}}}, {Region: "UK Glasgow", Hostname: "uk-gla.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 108, 105, 249}, {185, 108, 105, 155}, {185, 108, 105, 239}, {185, 108, 105, 22}}},
{Region: "UK London st003", IPs: []net.IP{{185, 134, 22, 92}}}, {Region: "UK London", Hostname: "uk-lon.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{188, 240, 71, 167}, {89, 34, 96, 86}, {185, 44, 77, 64}, {81, 19, 214, 65}, {86, 106, 157, 214}, {185, 125, 207, 155}, {81, 19, 210, 220}, {86, 106, 157, 160}}},
{Region: "UK London st004", IPs: []net.IP{{185, 44, 76, 186}}}, {Region: "UK London mp001", Hostname: "uk-lon-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{206, 189, 119, 92}}},
{Region: "UK London st005", IPs: []net.IP{{185, 44, 76, 188}}}, {Region: "UK London st001", Hostname: "uk-lon-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 146, 82, 83}}},
{Region: "UK Manchester", IPs: []net.IP{{84, 39, 114, 157}, {86, 106, 136, 77}, {84, 39, 114, 83}, {37, 120, 233, 11}, {89, 238, 130, 245}, {91, 90, 121, 189}, {37, 120, 233, 243}, {37, 120, 233, 117}}}, {Region: "UK London st002", Hostname: "uk-lon-st002.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 134, 22, 80}}},
{Region: "US Atlanta", IPs: []net.IP{{195, 181, 171, 226}, {195, 181, 171, 228}, {195, 181, 171, 249}, {195, 181, 171, 236}, {66, 115, 154, 135}, {195, 181, 171, 233}}}, {Region: "UK London st003", Hostname: "uk-lon-st003.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 134, 22, 92}}},
{Region: "US Bend", IPs: []net.IP{{45, 43, 14, 75}, {45, 43, 14, 103}, {45, 43, 14, 83}, {154, 16, 168, 188}}}, {Region: "UK London st004", Hostname: "uk-lon-st004.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 44, 76, 186}}},
{Region: "US Boston", IPs: []net.IP{{173, 237, 207, 60}, {173, 237, 207, 36}, {173, 237, 207, 58}, {173, 237, 207, 38}}}, {Region: "UK London st005", Hostname: "uk-lon-st005.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 44, 76, 188}}},
{Region: "US Buffalo", IPs: []net.IP{{172, 93, 146, 84}, {107, 174, 20, 130}, {64, 44, 42, 162}, {172, 93, 146, 210}}}, {Region: "UK Manchester", Hostname: "uk-man.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{217, 138, 196, 53}, {195, 12, 48, 213}, {89, 238, 135, 45}, {193, 148, 17, 131}, {37, 120, 233, 99}, {89, 238, 183, 11}, {84, 39, 114, 83}, {89, 238, 141, 197}, {37, 120, 233, 245}, {37, 120, 233, 77}, {2, 58, 45, 253}, {37, 120, 233, 53}, {193, 148, 17, 147}, {37, 120, 233, 107}}},
{Region: "US Charlotte", IPs: []net.IP{{192, 154, 254, 135}, {154, 16, 171, 206}}}, {Region: "US Atlanta", Hostname: "us-atl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{195, 181, 171, 243}, {66, 115, 175, 40}}},
{Region: "US Chicago", IPs: []net.IP{{138, 199, 42, 161}, {143, 244, 60, 169}, {184, 170, 250, 154}, {185, 246, 209, 50}, {138, 199, 42, 145}, {138, 199, 42, 163}, {143, 244, 60, 174}}}, {Region: "US Bend", Hostname: "us-bdn.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 43, 14, 85}, {154, 16, 168, 188}}},
{Region: "US Dallas", IPs: []net.IP{{66, 115, 177, 133}, {212, 102, 40, 76}, {66, 115, 177, 141}, {172, 241, 114, 89}, {89, 187, 175, 167}, {66, 115, 177, 148}}}, {Region: "US Boston", Hostname: "us-bos.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{173, 237, 207, 62}, {173, 237, 207, 21}, {173, 237, 207, 32}, {173, 237, 207, 13}}},
{Region: "US Denver", IPs: []net.IP{{212, 102, 44, 91}, {212, 102, 44, 96}, {212, 102, 44, 88}, {212, 102, 44, 83}}}, {Region: "US Buffalo", Hostname: "us-buf.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{107, 175, 104, 82}, {107, 174, 20, 134}, {172, 93, 153, 148}, {172, 93, 146, 210}, {107, 175, 104, 86}, {107, 175, 104, 84}, {172, 93, 153, 150}, {107, 174, 20, 130}}},
{Region: "US Gahanna", IPs: []net.IP{{104, 244, 208, 37}, {104, 244, 208, 213}, {104, 244, 211, 171}, {104, 244, 209, 99}, {104, 244, 211, 173}, {104, 244, 208, 227}, {104, 244, 211, 181}, {104, 244, 208, 99}, {104, 244, 210, 125}, {104, 244, 208, 107}, {104, 244, 210, 117}}}, {Region: "US Charlotte", Hostname: "us-clt.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{192, 154, 254, 135}, {154, 16, 171, 213}, {155, 254, 28, 141}, {192, 154, 254, 137}, {192, 154, 255, 52}}},
{Region: "US Houston", IPs: []net.IP{{199, 10, 64, 117}, {199, 10, 64, 69}, {199, 10, 64, 181}, {199, 10, 64, 131}, {104, 148, 30, 83}, {199, 10, 64, 101}}}, {Region: "US Chicago", Hostname: "us-chi.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{138, 199, 42, 135}, {138, 199, 42, 167}, {184, 170, 250, 154}, {138, 199, 42, 141}, {138, 199, 42, 149}, {138, 199, 42, 151}}},
{Region: "US Kansas City", IPs: []net.IP{{63, 141, 248, 181}, {173, 208, 202, 59}, {63, 141, 236, 243}, {173, 208, 149, 197}}}, {Region: "US Dallas", Hostname: "us-dal.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{66, 115, 177, 131}, {66, 115, 177, 133}, {66, 115, 177, 136}, {107, 181, 173, 163}, {172, 241, 114, 89}, {212, 102, 40, 76}}},
{Region: "US Las Vegas", IPs: []net.IP{{45, 89, 173, 203}, {89, 187, 187, 147}}}, {Region: "US Denver", Hostname: "us-den.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{212, 102, 44, 68}, {212, 102, 44, 83}, {212, 102, 44, 71}, {212, 102, 44, 73}, {212, 102, 44, 98}}},
{Region: "US Latham", IPs: []net.IP{{45, 43, 19, 68}, {45, 43, 19, 84}, {45, 43, 19, 74}, {45, 43, 19, 66}}}, {Region: "US Gahanna", Hostname: "us-dtw.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{104, 244, 208, 205}, {104, 244, 211, 139}}},
{Region: "US Los Angeles", IPs: []net.IP{{172, 83, 44, 83}, {184, 170, 243, 197}, {89, 187, 187, 83}, {184, 170, 243, 213}, {184, 170, 243, 195}, {184, 170, 243, 211}, {212, 103, 49, 149}, {138, 199, 9, 197}}}, {Region: "US Houston", Hostname: "us-hou.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{199, 10, 64, 99}, {199, 10, 64, 133}, {199, 10, 64, 147}, {199, 10, 64, 165}}},
{Region: "US Maryland", IPs: []net.IP{{23, 105, 160, 144}, {23, 82, 11, 51}, {23, 105, 160, 134}, {207, 244, 65, 17}, {207, 244, 84, 44}, {23, 105, 163, 109}}}, {Region: "US Kansas City", Hostname: "us-kan.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{69, 30, 249, 123}, {173, 208, 149, 195}, {198, 204, 231, 149}, {198, 204, 231, 147}}},
{Region: "US Miami", IPs: []net.IP{{45, 87, 214, 243}, {89, 38, 227, 171}, {87, 101, 93, 173}, {87, 101, 93, 187}, {193, 37, 252, 197}, {87, 101, 93, 179}}}, {Region: "US Las Vegas", Hostname: "us-las.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{79, 110, 53, 205}, {79, 110, 54, 115}, {185, 242, 5, 155}, {79, 110, 54, 125}, {185, 242, 5, 157}, {185, 242, 5, 147}}},
{Region: "US Netherlands", IPs: []net.IP{{142, 93, 58, 71}}}, {Region: "US Latham", Hostname: "us-ltm.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 43, 19, 68}, {45, 43, 19, 90}, {45, 43, 19, 92}, {154, 16, 169, 5}, {45, 43, 19, 84}, {154, 16, 169, 7}, {45, 43, 19, 66}, {45, 43, 19, 76}, {45, 43, 19, 74}}},
{Region: "US New York City", IPs: []net.IP{{138, 199, 40, 167}, {84, 17, 35, 118}, {172, 98, 75, 35}, {172, 98, 75, 37}, {84, 17, 35, 88}, {192, 40, 59, 240}, {84, 17, 35, 106}, {199, 36, 221, 101}, {199, 36, 221, 121}, {138, 199, 40, 172}, {138, 199, 40, 169}, {138, 199, 40, 182}, {89, 187, 177, 122}, {38, 132, 112, 101}, {84, 17, 35, 108}, {98, 142, 220, 37}, {84, 17, 35, 76}}}, {Region: "US Los Angeles", Hostname: "us-lax.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{38, 95, 110, 67}, {138, 199, 9, 199}, {89, 187, 187, 68}, {138, 199, 9, 195}, {184, 170, 243, 215}, {192, 111, 134, 69}, {89, 187, 187, 88}, {138, 199, 9, 193}, {138, 199, 9, 204}, {89, 187, 187, 86}}},
{Region: "US New York City mp001", IPs: []net.IP{{45, 55, 60, 159}}}, {Region: "US Maryland", Hostname: "us-mnz.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{162, 210, 199, 215}, {23, 82, 8, 173}, {23, 105, 178, 142}, {207, 244, 127, 116}, {207, 244, 86, 31}, {162, 210, 199, 217}}},
{Region: "US New York City st001", IPs: []net.IP{{92, 119, 177, 19}}}, {Region: "US Miami", Hostname: "us-mia.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{87, 101, 93, 179}, {91, 219, 214, 11}}},
{Region: "US New York City st002", IPs: []net.IP{{92, 119, 177, 21}}}, {Region: "US New York City", Hostname: "us-nyc.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{89, 187, 178, 94}, {138, 199, 40, 164}, {84, 17, 35, 83}, {138, 199, 40, 182}, {138, 199, 40, 177}, {84, 17, 35, 68}, {84, 17, 35, 116}, {107, 152, 101, 163}}},
{Region: "US New York City st003", IPs: []net.IP{{92, 119, 177, 23}}}, {Region: "US New York City mp001", Hostname: "us-nyc-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{45, 55, 60, 159}}},
{Region: "US New York City st004", IPs: []net.IP{{193, 148, 18, 51}}}, {Region: "US New York City st001", Hostname: "us-nyc-st001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{92, 119, 177, 19}}},
{Region: "US New York City st005", IPs: []net.IP{{193, 148, 18, 53}}}, {Region: "US New York City st002", Hostname: "us-nyc-st002.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{92, 119, 177, 21}}},
{Region: "US Orlando", IPs: []net.IP{{66, 115, 182, 69}, {198, 147, 22, 133}, {66, 115, 182, 79}, {66, 115, 182, 99}, {198, 147, 22, 167}, {198, 147, 22, 213}, {66, 115, 182, 104}, {66, 115, 182, 109}}}, {Region: "US New York City st003", Hostname: "us-nyc-st003.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{92, 119, 177, 23}}},
{Region: "US Phoenix", IPs: []net.IP{{199, 58, 187, 69}, {199, 58, 187, 13}, {172, 98, 87, 35}, {199, 58, 187, 8}, {199, 58, 187, 5}, {199, 58, 187, 3}}}, {Region: "US New York City st004", Hostname: "us-nyc-st004.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{193, 148, 18, 51}}},
{Region: "US Portugal", IPs: []net.IP{{142, 93, 81, 242}}}, {Region: "US New York City st005", Hostname: "us-nyc-st005.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{193, 148, 18, 53}}},
{Region: "US Saint Louis", IPs: []net.IP{{148, 72, 174, 36}, {148, 72, 174, 46}}}, {Region: "US Orlando", Hostname: "us-orl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{66, 115, 182, 72}, {66, 115, 182, 82}, {66, 115, 182, 104}, {198, 147, 22, 165}}},
{Region: "US Salt Lake City", IPs: []net.IP{{104, 200, 131, 249}, {104, 200, 131, 165}, {104, 200, 131, 245}, {104, 200, 131, 167}}}, {Region: "US Phoenix", Hostname: "us-phx.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{199, 58, 187, 67}, {199, 58, 187, 3}}},
{Region: "US San Francisco", IPs: []net.IP{{209, 58, 128, 48}, {107, 181, 166, 229}, {185, 124, 240, 171}, {185, 124, 240, 155}, {107, 181, 166, 227}, {185, 124, 240, 145}, {185, 124, 240, 153}, {23, 81, 181, 3}, {185, 124, 240, 149}, {107, 181, 166, 85}}}, {Region: "US Saint Louis", Hostname: "us-stl.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{148, 72, 174, 46}, {148, 72, 174, 43}, {148, 72, 169, 213}, {148, 72, 174, 48}, {148, 72, 174, 36}, {148, 72, 174, 38}, {148, 72, 169, 209}}},
{Region: "US San Francisco mp001", IPs: []net.IP{{165, 232, 53, 25}}}, {Region: "US Salt Lake City", Hostname: "us-slc.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{104, 200, 131, 165}, {104, 200, 131, 233}, {104, 200, 131, 172}, {104, 200, 131, 229}, {104, 200, 131, 245}, {104, 200, 131, 170}}},
{Region: "US Seatle", IPs: []net.IP{{198, 8, 80, 229}, {212, 102, 46, 67}, {84, 17, 41, 77}, {104, 200, 129, 245}}}, {Region: "US San Francisco", Hostname: "us-sfo.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{185, 124, 240, 173}, {23, 81, 179, 80}}},
{Region: "US Tampa", IPs: []net.IP{{209, 216, 92, 15}, {209, 216, 92, 200}, {209, 216, 92, 220}, {209, 216, 92, 197}}}, {Region: "US San Francisco mp001", Hostname: "us-sfo-mp001.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{165, 232, 53, 25}}},
{Region: "Ukraine", IPs: []net.IP{{45, 9, 238, 30}, {45, 9, 238, 38}, {176, 107, 185, 73}, {176, 107, 185, 71}}}, {Region: "US Seatle", Hostname: "us-sea.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{84, 17, 41, 79}, {212, 102, 46, 39}, {212, 102, 46, 56}, {199, 229, 250, 167}, {198, 8, 80, 85}, {212, 102, 46, 51}, {84, 17, 41, 85}, {84, 17, 41, 77}, {212, 102, 46, 71}, {212, 102, 46, 69}, {104, 200, 129, 245}, {104, 200, 129, 243}, {212, 102, 46, 37}, {212, 102, 46, 45}}},
{Region: "United Arab Emirates", IPs: []net.IP{{45, 9, 249, 247}, {45, 9, 250, 99}, {176, 125, 231, 5}, {176, 125, 231, 35}, {176, 125, 231, 11}, {176, 125, 231, 19}, {176, 125, 231, 37}, {176, 125, 231, 21}, {45, 9, 249, 243}, {45, 9, 249, 245}}}, {Region: "US Tampa", Hostname: "us-tpa.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{209, 216, 92, 18}, {209, 216, 92, 10}, {209, 216, 92, 200}}},
{Region: "Vietnam", IPs: []net.IP{{202, 143, 110, 36}, {202, 143, 110, 34}}}, {Region: "Ukraine", Hostname: "ua-iev.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{176, 107, 185, 73}, {45, 9, 238, 38}, {45, 9, 238, 23}, {45, 9, 238, 47}, {176, 107, 185, 71}}},
{Region: "United Arab Emirates", Hostname: "ae-dub.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{176, 125, 231, 27}, {45, 9, 250, 101}, {176, 125, 231, 29}, {176, 125, 231, 3}, {45, 9, 249, 247}, {45, 9, 249, 245}}},
{Region: "Vietnam", Hostname: "vn-hcm.prod.surfshark.com", TCP: true, UDP: true, IPs: []net.IP{{202, 143, 110, 36}, {202, 143, 110, 32}, {202, 143, 110, 29}}},
} }
} }

View File

@@ -148,12 +148,16 @@ func (s *PurevpnServer) String() string {
} }
type SurfsharkServer struct { type SurfsharkServer struct {
Region string `json:"region"` Region string `json:"region"`
IPs []net.IP `json:"ips"` Hostname string `json:"hostname"`
TCP bool `json:"tcp"`
UDP bool `json:"udp"`
IPs []net.IP `json:"ips"`
} }
func (s *SurfsharkServer) String() string { func (s *SurfsharkServer) String() string {
return fmt.Sprintf("{Region: %q, IPs: %s}", s.Region, goStringifyIPs(s.IPs)) return fmt.Sprintf("{Region: %q, Hostname: %q, TCP: %t, UDP: %t, IPs: %s}",
s.Region, s.Hostname, s.TCP, s.UDP, goStringifyIPs(s.IPs))
} }
type TorguardServer struct { type TorguardServer struct {

View File

@@ -7,6 +7,7 @@ import (
"net" "net"
"net/http" "net/http"
"strconv" "strconv"
"strings"
"github.com/qdm12/gluetun/internal/configuration" "github.com/qdm12/gluetun/internal/configuration"
"github.com/qdm12/gluetun/internal/constants" "github.com/qdm12/gluetun/internal/constants"
@@ -28,11 +29,14 @@ func newSurfshark(servers []models.SurfsharkServer, timeNow timeNowFunc) *surfsh
} }
} }
func (s *surfshark) filterServers(regions []string) (servers []models.SurfsharkServer) { func (s *surfshark) filterServers(regions, hostnames []string, protocol string) (servers []models.SurfsharkServer) {
for _, server := range s.servers { for _, server := range s.servers {
switch { switch {
case case
filterByPossibilities(server.Region, regions): filterByPossibilities(server.Region, regions),
filterByPossibilities(server.Hostname, hostnames),
strings.EqualFold(protocol, "tcp") && !server.TCP,
strings.EqualFold(protocol, "udp") && !server.UDP:
default: default:
servers = append(servers, server) servers = append(servers, server)
} }
@@ -40,6 +44,20 @@ func (s *surfshark) filterServers(regions []string) (servers []models.SurfsharkS
return servers return servers
} }
func (s *surfshark) notFoundErr(selection configuration.ServerSelection) error {
message := "for protocol " + selection.Protocol
if len(selection.Countries) > 0 {
message += " + regions " + commaJoin(selection.Regions)
}
if len(selection.Hostnames) > 0 {
message += " + hostnames " + commaJoin(selection.Hostnames)
}
return fmt.Errorf("%w: %s", errNoServerFound, message)
}
func (s *surfshark) GetOpenVPNConnection(selection configuration.ServerSelection) ( func (s *surfshark) GetOpenVPNConnection(selection configuration.ServerSelection) (
connection models.OpenVPNConnection, err error) { connection models.OpenVPNConnection, err error) {
var port uint16 var port uint16
@@ -56,9 +74,9 @@ func (s *surfshark) GetOpenVPNConnection(selection configuration.ServerSelection
return models.OpenVPNConnection{IP: selection.TargetIP, Port: port, Protocol: selection.Protocol}, nil return models.OpenVPNConnection{IP: selection.TargetIP, Port: port, Protocol: selection.Protocol}, nil
} }
servers := s.filterServers(selection.Regions) servers := s.filterServers(selection.Regions, selection.Hostnames, selection.Protocol)
if len(servers) == 0 { if len(servers) == 0 {
return connection, fmt.Errorf("no server found for region %s", commaJoin(selection.Regions)) return connection, s.notFoundErr(selection)
} }
var connections []models.OpenVPNConnection var connections []models.OpenVPNConnection

View File

@@ -9,14 +9,19 @@ import (
type hostToServer map[string]models.SurfsharkServer type hostToServer map[string]models.SurfsharkServer
func (hts hostToServer) add(host, region string) { func (hts hostToServer) add(host, region string, tcp, udp bool) {
// TODO set TCP and UDP
// TODO set hostname
server, ok := hts[host] server, ok := hts[host]
if !ok { if !ok {
server.Hostname = host
server.Region = region server.Region = region
hts[host] = server
} }
if tcp {
server.TCP = tcp
}
if udp {
server.UDP = udp
}
hts[host] = server
} }
func (hts hostToServer) toHostsSlice() (hosts []string) { func (hts hostToServer) toHostsSlice() (hosts []string) {

View File

@@ -36,6 +36,14 @@ func GetServers(ctx context.Context, unzipper unzip.Unzipper,
continue // not an OpenVPN file continue // not an OpenVPN file
} }
tcp, udp, err := openvpn.ExtractProto(content)
if err != nil {
// treat error as warning and go to next file
warning := err.Error() + " in " + fileName
warnings = append(warnings, warning)
continue
}
host, warning, err := openvpn.ExtractHost(content) host, warning, err := openvpn.ExtractHost(content)
if warning != "" { if warning != "" {
warnings = append(warnings, warning) warnings = append(warnings, warning)
@@ -55,7 +63,7 @@ func GetServers(ctx context.Context, unzipper unzip.Unzipper,
continue continue
} }
hts.add(host, region) hts.add(host, region, tcp, udp)
} }
if len(hts) < minServers { if len(hts) < minServers {
@@ -119,9 +127,14 @@ func getRemainingServers(ctx context.Context,
if err != nil { if err != nil {
return nil, warnings, err return nil, warnings, err
} }
// we assume the server supports TCP and UDP
server := models.SurfsharkServer{ server := models.SurfsharkServer{
Region: region, Region: region,
IPs: IPs, Hostname: host,
TCP: true,
UDP: true,
IPs: IPs,
} }
servers = append(servers, server) servers = append(servers, server)
} }

View File

@@ -8,6 +8,9 @@ import (
func sortServers(servers []models.SurfsharkServer) { func sortServers(servers []models.SurfsharkServer) {
sort.Slice(servers, func(i, j int) bool { sort.Slice(servers, func(i, j int) bool {
if servers[i].Region == servers[j].Region {
return servers[i].Hostname < servers[j].Hostname
}
return servers[i].Region < servers[j].Region return servers[i].Region < servers[j].Region
}) })
} }