From ed857900ae271db17d43703ae3ebdab24c506092 Mon Sep 17 00:00:00 2001 From: Akatsuki-Misaki Date: Mon, 24 Feb 2025 22:48:23 +0800 Subject: [PATCH] =?UTF-8?q?Update:=E6=9B=B4=E6=96=B0=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B0=8F=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- PHP/ipsearch.php | 49 ++++ PHP/jsd.php | 133 ----------- PHP/jsd加速/README.md | 19 ++ PHP/jsd加速/index.php | 203 +++++++++++++++++ PHP/jsd加速/jsd.html | 387 ++++++++++++++++++++++++++++++++ Python/UNPKG/main.py | 6 +- Python/wav_flac_music/Readme.md | 13 ++ Python/wav_flac_music/main.py | 71 ++++++ ip.txt | 161 +++++++++++++ 10 files changed, 909 insertions(+), 137 deletions(-) create mode 100644 PHP/ipsearch.php delete mode 100644 PHP/jsd.php create mode 100644 PHP/jsd加速/README.md create mode 100644 PHP/jsd加速/index.php create mode 100644 PHP/jsd加速/jsd.html create mode 100644 Python/wav_flac_music/Readme.md create mode 100644 Python/wav_flac_music/main.py create mode 100644 ip.txt diff --git a/.gitignore b/.gitignore index f180fc8..12f0d2d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ build dist @* Home_ping_log.txt -Server_guangzhou_ping_log.txt \ No newline at end of file +Server_guangzhou_ping_log.txt +main_*.py +*@* \ No newline at end of file diff --git a/PHP/ipsearch.php b/PHP/ipsearch.php new file mode 100644 index 0000000..c753d6e --- /dev/null +++ b/PHP/ipsearch.php @@ -0,0 +1,49 @@ + $ip_address, + 'address' => $info_ip_address, + 'isp' => $info_ip_isp + ); + echo json_encode($data); + }else{ + header('Content-Type: application/json'); + http_response_code(403); + $data = array( + 'info' => '获取失败' + ); + echo json_encode($data); + } +}else if($format === 'text'){ + echo $ip_address; +}else{ + header('Content-Type: application/json'); + http_response_code(403); + $data = array( + 'info' => '服务器认为格式有误(EC: 3).ο(=•ω<=)ρ⌒☆' + ); + echo json_encode($data); +} +?> \ No newline at end of file diff --git a/PHP/jsd.php b/PHP/jsd.php deleted file mode 100644 index bfadc62..0000000 --- a/PHP/jsd.php +++ /dev/null @@ -1,133 +0,0 @@ -1){ // 非根目录 - $cdn_file = substr($file, strlen($self_path)); // 去掉开头的目录 -} -$local_path = substr(pathinfo( $cdn_file, PATHINFO_DIRNAME), 1); // 去掉开头的/ -if($local_path && !is_dir($local_path)){ // 目录不存在 - @mkdir($local_path, 755, true); // 创建目录 -} -$url = 'https://cdn.jsdelivr.net' . $cdn_file . $query; // 构造CDN文件URL -$content = curl($url); // 获取文件内容 -if($content){ - header('content-type:'. $mimetype .';charset=utf-8'); // 输出文件头 - file_put_contents(substr($cdn_file, 1), $content); // 保存文件 - exit($content); // 输出文件 -}else{ - header('location: ' .$url ); -} - - -function curl($url) -{ - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_NOSIGNAL, 1); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3000); - curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3000); - if (strpos($url, 'https') !== false) { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); - } - curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'); - $result = curl_exec($ch); - curl_close($ch); - return $result; -} -/** - * 根据文件后缀获取其mine类型 - * @param string $extension - * @return string - */ - function get_mimetype($extension) { - $ct['htm'] = 'text/html'; - $ct['html'] = 'text/html'; - $ct['txt'] = 'text/plain'; - $ct['asc'] = 'text/plain'; - $ct['bmp'] = 'image/bmp'; - $ct['gif'] = 'image/gif'; - $ct['jpeg'] = 'image/jpeg'; - $ct['jpg'] = 'image/jpeg'; - $ct['jpe'] = 'image/jpeg'; - $ct['png'] = 'image/png'; - $ct['ico'] = 'image/vnd.microsoft.icon'; - $ct['mpeg'] = 'video/mpeg'; - $ct['mpg'] = 'video/mpeg'; - $ct['mpe'] = 'video/mpeg'; - $ct['qt'] = 'video/quicktime'; - $ct['mov'] = 'video/quicktime'; - $ct['avi'] = 'video/x-msvideo'; - $ct['wmv'] = 'video/x-ms-wmv'; - $ct['mp2'] = 'audio/mpeg'; - $ct['mp3'] = 'audio/mpeg'; - $ct['rm'] = 'audio/x-pn-realaudio'; - $ct['ram'] = 'audio/x-pn-realaudio'; - $ct['rpm'] = 'audio/x-pn-realaudio-plugin'; - $ct['ra'] = 'audio/x-realaudio'; - $ct['wav'] = 'audio/x-wav'; - $ct['css'] = 'text/css'; - $ct['zip'] = 'application/zip'; - $ct['pdf'] = 'application/pdf'; - $ct['doc'] = 'application/msword'; - $ct['bin'] = 'application/octet-stream'; - $ct['exe'] = 'application/octet-stream'; - $ct['class'] = 'application/octet-stream'; - $ct['dll'] = 'application/octet-stream'; - $ct['xls'] = 'application/vnd.ms-excel'; - $ct['ppt'] = 'application/vnd.ms-powerpoint'; - $ct['wbxml'] = 'application/vnd.wap.wbxml'; - $ct['wmlc'] = 'application/vnd.wap.wmlc'; - $ct['wmlsc'] = 'application/vnd.wap.wmlscriptc'; - $ct['dvi'] = 'application/x-dvi'; - $ct['spl'] = 'application/x-futuresplash'; - $ct['gtar'] = 'application/x-gtar'; - $ct['gzip'] = 'application/x-gzip'; - $ct['js'] = 'application/javascript'; - $ct['swf'] = 'application/x-shockwave-flash'; - $ct['tar'] = 'application/x-tar'; - $ct['7z'] = 'application/x7zcompressed'; - $ct['rar'] = 'application/x-rar-compressed'; - $ct['xhtml'] = 'application/xhtml+xml'; - $ct['au'] = 'audio/basic'; - $ct['snd'] = 'audio/basic'; - $ct['midi'] = 'audio/midi'; - $ct['mid'] = 'audio/midi'; - $ct['m3u'] = 'audio/x-mpegurl'; - $ct['tiff'] = 'image/tiff'; - $ct['tif'] = 'image/tiff'; - $ct['rtf'] = 'text/rtf'; - $ct['wml'] = 'text/vnd.wap.wml'; - $ct['wmls'] = 'text/vnd.wap.wmlscript'; - $ct['xsl'] = 'text/xml'; - $ct['xml'] = 'text/xml'; - - return isset($ct[strtolower($extension)]) ? $ct[strtolower($extension)] : 'text/html'; -} \ No newline at end of file diff --git a/PHP/jsd加速/README.md b/PHP/jsd加速/README.md new file mode 100644 index 0000000..8c54f02 --- /dev/null +++ b/PHP/jsd加速/README.md @@ -0,0 +1,19 @@ +# 伪静态需求 + +```Apache +RewriteEngine on +RewriteBase / +RewriteCond $1 ^(index\.php)?$ [OR] +RewriteCond %{REQUEST_FILENAME} -f [OR] +RewriteCond %{REQUEST_FILENAME} -d [OR] +RewriteCond %{REQUEST_FILENAME} ^index\.php?$ +RewriteRule ^(.*)$ - [S=1] +RewriteRule . /index.php [L] + +``` + +```nginx +location / { + try_files $uri $uri/ /index.php?$query_string; +} +``` \ No newline at end of file diff --git a/PHP/jsd加速/index.php b/PHP/jsd加速/index.php new file mode 100644 index 0000000..9b2cbdb --- /dev/null +++ b/PHP/jsd加速/index.php @@ -0,0 +1,203 @@ + 200, + 'title'=> 'Welcome to use OvOfish Studio API', + 'message' => '这是一个反代接口,如有需要请联系管理员。', + 'How_to_use' => '您只需将原有的域名更改为本站域名如需要使用jsdelivr的反代请添加/jsd,如需要raw.githubusercontent.com则添加/gh', + 'support_list' => '支持的接口:'.implode(',', array('/gh', '/jsd', '/unpkg')), + 'file_ext_list' => '允许的后缀列表:'.implode(',', $allow_ext) + )); + exit(); +} +if($_SERVER['REQUEST_URI'] == '/contact'){ + header('content-type: application/json;charset=utf-8'); + echo json_encode(array( + 'code' => 200, + 'title'=> 'Welcome to use OvOfish Studio API', + 'message' => '这是一个反代接口,如有需要请联系管理员。', + 'QQnumber' => '1709964150', + 'email' => 'mirai@lolicon.team', + 'blog' => 'https://lolicon.team' + )); + exit(); +} +if(empty($file_ext)){ + header('content-type: application/json;charset=utf-8'); + echo json_encode(array( + 'code' => 403, + 'title'=> 'Welcome to use OvOfish Studio API', + 'message' => '未能识别到文件类型', + 'file_ext' => '当前文件类型为:NULL', + 'file_ext_list' => '允许的后缀列表:'.implode(',', $allow_ext) + )); + exit(); +} +// 判断后缀是否在允许的后缀列表中 如果不在,则返回403 +if(!in_array($file_ext, $allow_ext)){ + header('content-type: application/json;charset=utf-8'); + echo json_encode(array( + 'code' => 403, + 'title'=> 'Welcome to OvOfish Studio API', + 'message' => '该文件类型不被允许, 请不要滥用本接口。', + 'file_ext' => '当前文件类型为:'.$file_ext, + 'file_ext_list' => '允许的后缀列表:'.implode(',', $allow_ext) + )); + exit(); +} +$mimetype = get_mimetype($file_info['extension']); +header('content-type:'. $mimetype .';charset=utf-8'); +// 代理的域名及使用的协议最后不用加/ +$target_host = ""; +$new_request_uri = ""; +if (strpos($_SERVER['REQUEST_URI'], '/gh') === 0) { + $target_host = "https://raw.githubusercontent.com"; + $new_request_uri = substr($_SERVER['REQUEST_URI'], 3); +} elseif (strpos($_SERVER['REQUEST_URI'], '/jsd') === 0) { + $target_host = "https://cdn.jsdelivr.net"; + $new_request_uri = substr($_SERVER['REQUEST_URI'], 5); +}elseif (strpos($_SERVER['REQUEST_URI'], '/unpkg') === 0) { + $target_host = "https://unpkg.com"; + $new_request_uri = substr($_SERVER['REQUEST_URI'], 6); +} else { + header('content-type: application/json;charset=utf-8'); + // 返回404状态 + http_response_code(404); + echo json_encode(array( + 'code' => 404, + 'title'=> 'Welcome to use OvOfish Studio API', + 'message' => '无效的请求路径' + )); + exit; +} +// 解析url参数 +function get_request_params() +{ + $url = $_SERVER["REQUEST_URI"]; + $refer_url = parse_url($url); + $params = $refer_url['query']; + $arr = array(); + if(!empty($params)) + { + $paramsArr = explode('&',$params); + foreach($paramsArr as $k=>$v) + { + $a = explode('=',$v); + $arr[$a[0]] = $a[1]; + } + } + return $arr; +} +// 解析HTTP响应头 +function parse_headers($headers) +{ + global $root, $top; + foreach( $headers as $k=>$v ) + { + $t = explode( ':', $v, 2 ); + if( isset( $t[1] ) ) + { + if(strcasecmp('Set-Cookie',trim($t[0]))==0) + { + $targetcookie=trim( $t[1] ).";"; + $res_cookie=preg_replace("/domain=.*?;/","domain=".$_SERVER["SERVER_NAME"].";",$targetcookie); + $res_cookie=substr($res_cookie,0,strlen($res_cookie)-1); + header("Set-Cookie: ".$res_cookie); + } + elseif(strcasecmp('Content-Type',trim($t[0]))==0) + { + header("Content-Type: ".trim( $t[1] )); + } + elseif(strcasecmp('Location',trim( $t[0] ))==0) + { + $relocation=str_replace($protocal_host['host'],$_SERVER["SERVER_NAME"],trim( $t[1] )); + header("Location: ".$relocation); + } + elseif(strcasecmp('cache-control',trim( $t[0] ))==0) + { + header("cache-control: ".trim( $t[1] )); + } + else + continue; + } + } + return; +} +// 组装HTTP请求头 +$opts = array( + 'http'=>array( + 'method'=>$_SERVER['REQUEST_METHOD'], + 'header'=>"Accept-language: zh-CN\r\n" . + "user-agent: {$_SERVER['HTTP_USER_AGENT']}\r\n". + "Cookie: ".array_to_str($_COOKIE)."\r\n" + ) +); +$context = stream_context_create($opts); +// 发送请求 +$homepage = file_get_contents($target_host.'/'.$new_request_uri,false,$context); +if ($homepage === FALSE) { + header('content-type: application/json;charset=utf-8'); + echo json_encode(array( + 'code' => 404, + 'title'=> 'Welcome to use OvOfish Studio API', + 'message' => '未能找到文件', + 'file_ext' => '当前文件类型为:'.$file_ext + )); + exit; +} +function get_mimetype($extension) { + // MIME类型数组 + $ct = array( + 'js' => 'application/javascript', + 'css' => 'text/css', + 'png' => 'image/png', + 'jpg' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'gif' => 'image/gif', + 'ico' => 'image/vnd.microsoft.icon', + 'json' => 'application/json', + 'txt' => 'text/plain', + 'moc' => 'text/plain', + 'moc3' => 'text/plain', + 'svg' => 'image/svg+xml', + 'webp' => 'image/webp' + ); + return isset($ct[strtolower($extension)]) ? $ct[strtolower($extension)] : 'text/plain'; +} +function array_to_str($array) +{ + $string=""; + if (is_array($array)) + { + foreach ($array as $key => $value) + { + if(!empty($string)) + $string.="; ".$key."=".$value; + else + $string.=$key."=".$value; + } + } else + { + $string = $array; + } + return $string; +} +// 输出网页内容 +echo $homepage; +?> \ No newline at end of file diff --git a/PHP/jsd加速/jsd.html b/PHP/jsd加速/jsd.html new file mode 100644 index 0000000..e22876c --- /dev/null +++ b/PHP/jsd加速/jsd.html @@ -0,0 +1,387 @@ + + + + + ovofish - A free, fast, and reliable CDN for JS and open source + + +
+ +
+ + + + + + ovofish - A free, fast, and reliable CDN for JS and open source + + + + + +
+
+ +
+
+
+
+
+
+ +

A free CDN for open source projects

+

+ 前端文件加速服务,
妈妈再也不用担心我的博客加载慢啦!

+
+
+
+
+
+
+
+
+ +
+
+
+
+
+

安心稳定的服务

+

+ 由于本项目是反代jsdelivr和github的raw。
具有亚太CDN缓存(亚马逊服务器)
为了防止被滥用,我们限制了文件类型
+

+

使用方法 >

+
+
+
+
+
+ + + +
+
+
+
+

+ +

+ 探索更多的可能 +

+
+

+
+
+
+
image +

稳定性

+

服务使用市面上成熟可靠的程序和服务,为OvOFish Studio API提供了稳固的底层基础。

+
+
image +

安全性

+

OvOFish Studio API使用质量可靠的SSL证书,最低TLS版本为1.2,保障文件不被篡改。

+
+
image +

高速传输

+

使用亚马逊服务器搭建的CDN加速,保障每一次文件加载都是最快;延迟极低的本地缓存,让除第一次访问外的回源,无比迅速。

+
+
+
+
image
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+

© 2024 OvOFish Studio.
All rights reserved.

+ +
+
+
+
+

联系我们

+
中国·广东·肇庆
mirai@lolicon.team
+
+
+
+
+

了解更多

+ +
+
+
+
+

电子邮件

+

您可以发送邮件到:mirai@lolicon.team联系我们!

+
+
+
+
+
+ + +
+
+ + + \ No newline at end of file diff --git a/Python/UNPKG/main.py b/Python/UNPKG/main.py index aa9b991..9ffe8ec 100644 --- a/Python/UNPKG/main.py +++ b/Python/UNPKG/main.py @@ -7,7 +7,7 @@ from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # 配置 -url = "https://unpkg.ovofish.com/" +url = "https://unpkg.com/" headers = { 'Accept-Language': 'zh-CN,zh;q=0.8', 'Content-Type': 'text/html; Charset=utf-8', @@ -123,8 +123,8 @@ else: use_proxy = input("是否使用代理?(输入 'y' 或 'n'): ").lower() if use_proxy == 'y': # 获取代理设置 - default_proxy_host = "10.10.50.210" # 设置默认代理主机 - default_proxy_port = 65115 # 设置默认代理端口 + default_proxy_host = "10.10.50.65" # 设置默认代理主机 + default_proxy_port = 7897 # 设置默认代理端口 proxy_host = input(f"请输入代理主机 (默认为 {default_proxy_host}): ") or default_proxy_host proxy_port = int(input(f"请输入代理端口 (默认为 {default_proxy_port}): ") or default_proxy_port) diff --git a/Python/wav_flac_music/Readme.md b/Python/wav_flac_music/Readme.md new file mode 100644 index 0000000..b8cd619 --- /dev/null +++ b/Python/wav_flac_music/Readme.md @@ -0,0 +1,13 @@ +
+ logo +

🗂️OVOFISH STUDIO

+ +# 说明 + + 这是一个自动化音频转换格式的脚本 + 因为wav格式不支持内部歌词数据所以要转为flac格式 + 运行前请先安装依赖库 + +``` +pip install pydub mutagen eyed3 +``` diff --git a/Python/wav_flac_music/main.py b/Python/wav_flac_music/main.py new file mode 100644 index 0000000..8d5dca8 --- /dev/null +++ b/Python/wav_flac_music/main.py @@ -0,0 +1,71 @@ +import os +from pydub import AudioSegment +import eyed3 +from mutagen.flac import FLAC + +def convert_and_clean(wav_path): + try: + # 增强版元数据读取 + tags = {} + audiofile = eyed3.load(wav_path) + + # 处理无标签文件 + if audiofile is not None and audiofile.tag is not None: + tags = { + 'ARTIST': audiofile.tag.artist or '', + 'ALBUM': audiofile.tag.album or '', + 'TITLE': audiofile.tag.title or '', + 'GENRE': audiofile.tag.genre.name if audiofile.tag.genre else '', + 'DATE': str(audiofile.tag.getBestDate()) or '', + 'TRACKNUMBER': str(audiofile.tag.track_num[0]) if audiofile.tag.track_num else '' + } + else: + # 从文件名提取基础信息 + filename = os.path.basename(wav_path) + base_info = os.path.splitext(filename)[0].split('-', 1) + if len(base_info) > 1: + tags['ARTIST'] = base_info[0].strip() + tags['TITLE'] = base_info[1].strip() + + # 转换音频格式 + flac_path = os.path.splitext(wav_path)[0] + '.flac' + AudioSegment.from_wav(wav_path).export(flac_path, format='flac') + + # 写入FLAC元数据 + if tags: + flac_audio = FLAC(flac_path) + flac_audio.delete() + flac_audio.update(tags) + flac_audio.save() + + # 安全删除验证 + if os.path.exists(flac_path) and os.path.getsize(flac_path) > 0: + os.remove(wav_path) + print(f"成功转换并删除: {wav_path}") + return True + return False + + except Exception as e: + print(f"处理失败 {wav_path}: {str(e)}") + if 'flac_path' in locals() and os.path.exists(flac_path): + os.remove(flac_path) + return False + +def batch_convert(): + deleted_count = 0 + error_count = 0 + + for root, _, files in os.walk('.'): + for file in files: + if file.lower().endswith('.wav'): + full_path = os.path.join(root, file) + if convert_and_clean(full_path): + deleted_count += 1 + else: + error_count += 1 + + print(f"\n转换总结:\n成功转换并删除: {deleted_count} 个文件\n失败文件: {error_count} 个") + +if __name__ == "__main__": + print("=== WAV转FLAC工具 (增强安全版) ===") + batch_convert() \ No newline at end of file diff --git a/ip.txt b/ip.txt new file mode 100644 index 0000000..ad4cb08 --- /dev/null +++ b/ip.txt @@ -0,0 +1,161 @@ +10.10.50.90 +10.10.50.91 +10.10.50.92 +10.10.50.93 +10.10.50.94 +10.10.50.95 +10.10.50.96 +10.10.50.97 +10.10.50.98 +10.10.50.99 +10.10.50.100 +10.10.50.101 +10.10.50.102 +10.10.50.103 +10.10.50.104 +10.10.50.105 +10.10.50.106 +10.10.50.107 +10.10.50.108 +10.10.50.109 +10.10.50.110 +10.10.50.111 +10.10.50.112 +10.10.50.113 +10.10.50.114 +10.10.50.115 +10.10.50.116 +10.10.50.117 +10.10.50.118 +10.10.50.119 +10.10.50.120 +10.10.50.121 +10.10.50.122 +10.10.50.123 +10.10.50.124 +10.10.50.125 +10.10.50.126 +10.10.50.127 +10.10.50.128 +10.10.50.129 +10.10.50.130 +10.10.50.131 +10.10.50.132 +10.10.50.133 +10.10.50.134 +10.10.50.135 +10.10.50.136 +10.10.50.137 +10.10.50.138 +10.10.50.139 +10.10.50.140 +10.10.50.141 +10.10.50.142 +10.10.50.143 +10.10.50.144 +10.10.50.145 +10.10.50.146 +10.10.50.147 +10.10.50.148 +10.10.50.149 +10.10.50.150 +10.10.50.151 +10.10.50.152 +10.10.50.153 +10.10.50.154 +10.10.50.155 +10.10.50.156 +10.10.50.157 +10.10.50.158 +10.10.50.159 +10.10.50.160 +10.10.50.161 +10.10.50.162 +10.10.50.163 +10.10.50.164 +10.10.50.165 +10.10.50.166 +10.10.50.167 +10.10.50.168 +10.10.50.169 +10.10.50.170 +10.10.50.171 +10.10.50.172 +10.10.50.173 +10.10.50.174 +10.10.50.175 +10.10.50.176 +10.10.50.177 +10.10.50.178 +10.10.50.179 +10.10.50.180 +10.10.50.181 +10.10.50.182 +10.10.50.183 +10.10.50.184 +10.10.50.185 +10.10.50.186 +10.10.50.187 +10.10.50.188 +10.10.50.189 +10.10.50.190 +10.10.50.191 +10.10.50.192 +10.10.50.193 +10.10.50.194 +10.10.50.195 +10.10.50.196 +10.10.50.197 +10.10.50.198 +10.10.50.199 +10.10.50.200 +10.10.50.201 +10.10.50.202 +10.10.50.203 +10.10.50.204 +10.10.50.205 +10.10.50.206 +10.10.50.207 +10.10.50.208 +10.10.50.209 +10.10.50.210 +10.10.50.211 +10.10.50.212 +10.10.50.213 +10.10.50.214 +10.10.50.215 +10.10.50.216 +10.10.50.217 +10.10.50.218 +10.10.50.219 +10.10.50.220 +10.10.50.221 +10.10.50.222 +10.10.50.223 +10.10.50.224 +10.10.50.225 +10.10.50.226 +10.10.50.227 +10.10.50.228 +10.10.50.229 +10.10.50.230 +10.10.50.231 +10.10.50.232 +10.10.50.233 +10.10.50.234 +10.10.50.235 +10.10.50.236 +10.10.50.237 +10.10.50.238 +10.10.50.239 +10.10.50.240 +10.10.50.241 +10.10.50.242 +10.10.50.243 +10.10.50.244 +10.10.50.245 +10.10.50.246 +10.10.50.247 +10.10.50.248 +10.10.50.249 +10.10.50.250