Would anyone like to join us in creating a new tashiro ueaponn? #167980
              
                Unanswered
              
          
                  
                    
                      comted
                    
                  
                
                  asked this question in
                Code Search and Navigation
              
            Replies: 1 comment 5 replies
-
| 
         Hey @comted  | 
  
Beta Was this translation helpful? Give feedback.
                  
                    5 replies
                  
                
            
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
        
    
Uh oh!
There was an error while loading. Please reload this page.
-
Select Topic Area
General
Body
<title>tashiro-weapon PRO vr2</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script> <style> body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0a0a0a; color: #fff; min-height: 100vh; overflow-x: hidden; } .dashboard { display: flex; min-height: 100vh; } .main-content { flex: 2; padding: 20px; display: flex; flex-direction: column; gap: 20px; } .control-panel { flex: 1; background: #1a1a1a; border-left: 1px solid #333; padding: 20px; overflow-y: auto; min-width: 340px; max-width: 420px; } .stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; } .stat-card { background: #1a1a1a; border: 1px solid #333; border-radius: 12px; padding: 20px; text-align: center; } .stat-card h3 { font-size: 14px; color: #999; margin-bottom: 10px; font-weight: 500; } .stat-card .value { font-size: 2em; font-weight: 700; color: #fff; } .stat-card .percent { font-size: 1em; font-weight: 700; color: #4d7d4d; display: block; margin-top: 8px; } .stat-card .value.success { color: #4d7d4d; } .stat-card .value.warning { color: #7d6d4d; } .stat-card .value.danger { color: #7d4d4d; } .chart-container { background: #1a1a1a; border: 1px solid #333; border-radius: 12px; padding: 20px; height: 300px; position: relative; margin-bottom: 20px; } .chart-container h3 { font-size: 16px; color: #fff; margin-bottom: 15px; font-weight: 600; } .chart-canvas { position: relative; height: 250px; } .input-group { margin-bottom: 20px; display: flex; flex-direction: column; } .input-group label { margin-bottom: 8px; color: #999; font-weight: 500; font-size: 14px; } .input-group input, .input-group textarea, .input-group select { width: 100%; padding: 12px 16px; border: 1px solid #333; border-radius: 8px; font-size: 14px; background: #0f0f0f; color: #fff; transition: border-color 0.2s ease; margin-bottom: 0px; } .input-group input:focus, .input-group textarea:focus, .input-group select:focus { outline: none; border-color: #65aaff; } .input-group input::placeholder, .input-group textarea::placeholder { color: #555; } .input-row { display: flex; gap: 15px; margin-bottom: 20px; } .input-row .input-group { flex: 1; margin-bottom: 0; min-width: 0; } .button { width: 100%; padding: 12px 16px; border: none; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; margin-bottom: 10px; } .button:hover { transform: translateY(-1px); } .button:active { transform: translateY(0); } .button-primary { background: #fff; color: #000; } .button-primary:hover { background: #f0f0f0; } .button-success { background: #2d5a2d; color: #fff; } .button-success:hover { background: #3d6a3d; } .button-danger { background: #5a2d2d; color: #fff; } .button-danger:hover { background: #6a3d3d; } .toggle-switch, .toggle-switch-timer { position: relative; width: 45px; height: 24px; background: #333; border-radius: 12px; cursor: pointer; transition: background 0.2s ease; display: inline-block; vertical-align: middle; border: 1px solid #444; } .toggle-switch.active, .toggle-switch-timer.active { background: #65aaff; } .toggle-switch::before, .toggle-switch-timer::before { content: ''; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: #fff; border-radius: 50%; transition: transform 0.2s; } .toggle-switch.active::before, .toggle-switch-timer.active::before { transform: translateX(21px); } .random-toggle-label, .iframe-response-toggle-label, .timer-toggle-label, .ip-spoof-toggle-label { color: #999; font-size: 15px; font-weight: 500; user-select: none; margin-left: 7px; } .random-toggle-status, .iframe-response-toggle-status, .timer-toggle-status, .ip-spoof-toggle-status { font-size: 15px; color: #999; font-weight: 500; margin-left: 7px; } .random-toggle-status.active, .iframe-response-toggle-status.active, .timer-toggle-status.active, .ip-spoof-toggle-status.active { color: #4d7d4d; } .random-toggle-group, .iframe-response-toggle-group, .timer-toggle-group, .ip-spoof-toggle-group { display: flex; align-items: center; gap: 10px; margin-bottom: 15px; } .iframe-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; margin-top: 15px; } .iframe-wrapper { background: #1a1a1a; border: 1px solid #333; border-radius: 8px; padding: 10px; text-align: center; } .iframe-wrapper h4 { font-size: 12px; color: #999; margin-bottom: 8px; } .iframe-wrapper iframe { width: 100%; height: 120px; border: 1px solid #333; border-radius: 4px; background: #222; } .iframe-status { font-size: 10px; color: #666; margin-top: 5px; } .iframe-status.success { color: #4d7d4d; } .iframe-status.error { color: #7d4d4d; } .status-indicator { display: flex; align-items: center; gap: 10px; margin-bottom: 15px; padding: 10px; border-radius: 8px; background: #111; border: 1px solid #333; } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: #555; } .status-dot.running { background: #4d7d4d; animation: pulse 2s infinite; } .status-dot.stopped { background: #7d4d4d; } @Keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } @media (max-width: 700px) { .dashboard { flex-direction: column; } .main-content, .control-panel { min-width: unset; max-width: unset; width: 100%; } } .proxy-config-group { margin-bottom: 18px; padding-bottom: 12px; border-bottom: 1px solid #222; } .proxy-label { font-size: 13px; color: #aaa; margin-bottom: 6px; } .proxy-method-row { display: flex; gap: 15px; margin-bottom: 10px; } .proxy-inputs-row { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; } .proxy-inputs-row .input-group { min-width: 120px; flex: 1; } .proxy-auth-group { margin-top: 12px; display: none; } .proxy-auth-group label { margin-bottom: 3px; color: #aaa; font-size: 13px; } .proxy-auth-group input { width: 100%; padding: 8px 13px; border: 1px solid #333; border-radius: 7px; font-size: 13px; background: #181818; color: #fff; margin-bottom: 8px; } #proxyType { min-width: 110px; } #ipSpoofSection { margin-top: 24px; margin-bottom: 24px; background: #181818; border-radius: 12px; padding: 28px 20px 24px 20px; border: 1px solid #333; box-shadow: 0 2px 10px rgba(0,0,0,0.07); } #ipSpoofSection h3 { color: #65aaff; font-size: 20px; margin-bottom: 14px; font-weight: 700; letter-spacing: 0.5px; } .ip-spoof-desc { font-size: 13px; color: #89a; margin-top: 14px; margin-bottom: 0; line-height: 1.7; } .ip-spoof-toggle-group { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; margin-top: 2px; } .ip-spoof-toggle-label { color: #999; font-size: 15px; font-weight: 500; user-select: none; } .ip-spoof-toggle-status { font-size: 15px; color: #999; font-weight: 500; margin-left: 6px; } .ip-spoof-toggle-status.active { color: #4d7d4d; } .ip-spoof-mode-row { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; } .ip-spoof-mode-row label { color: #bbb; font-size: 15px; font-weight: 500; margin-bottom: 0; } #ipSpoofMode { display: inline-block; padding: 8px 14px; background: #222; color: #fff; border: 1px solid #444; border-radius: 6px; font-size: 15px; margin-left: 0; margin-top: 0; margin-bottom: 0; transition: border-color 0.2s; } #ipSpoofMode:focus { outline: none; border-color: #65aaff; } .ip-spoof-fixed, .ip-spoof-list, .ip-spoof-range { margin-top: 14px; margin-bottom: 0; transition: all 0.3s; } .ip-spoof-fixed label, .ip-spoof-list label, .ip-spoof-range label { color: #aaa; font-size: 14px; font-weight: 500; margin-bottom: 6px; display: block; } #ipSpoofAddress, #ipSpoofRange, #ipSpoofList { width: 100%; padding: 10px 14px; background: #232323; color: #eaffff; border: 1px solid #444; border-radius: 7px; font-size: 15px; margin-top: 6px; margin-bottom: 0; transition: border-color 0.2s; } #ipSpoofAddress:focus, #ipSpoofRange:focus, #ipSpoofList:focus { outline: none; border-color: #65aaff; } #ipSpoofList { min-height: 54px; font-family: inherit; resize: vertical; } .ip-spoof-headers { margin-top: 17px; margin-bottom: 0; display: flex; gap: 24px; flex-wrap: wrap; } .ip-spoof-headers label { color: #bdf; font-size: 14px; font-weight: 500; user-select: none; display: flex; align-items: center; gap: 3px; margin-bottom: 0; } .ip-spoof-headers input[type="checkbox"] { accent-color: #65aaff; width: 16px; height: 16px; margin-right: 3px; } #ipSpoofHistory { margin-top: 15px; background: #242a30; color: #65aaff; font-size: 13px; border-radius: 6px; padding: 8px 12px; max-height: 120px; overflow-y: auto; margin-bottom: 4px; } </style>成功読み込み
失敗読み込み
総データ使用量
現在の速度
リクエスト送信総回数
通信速度推移
毎秒データ使用量
累積データ容量
平均速度
アクティブなiframe
tashiro-weapon PRO vr2
パソコン落ち防止プログラム ON
IPスプーフィング(強化拡張版)
※複数IP・履歴・CSV出力対応。
※ランダム生成はCIDR範囲からIPを自動生成します。
自動更新制御
@twmt(Tashiro ueapon making team) <script> // ---- JS全機能 ---- let successCount = 0, failCount = 0, totalDataUsage = 0, currentSpeed = 0; let speedChart, dataChart, cumulativeDataChart, averageSpeedChart; let speedData = [], dataUsageData = [], cumulativeDataData = [], averageSpeedData = []; let lastUpdateTime = Date.now(), lastDataAmount = 0; let requestCount = 0; let iframeCount = 1; let autoUpdateInterval = null; let randomUpdateEnabled = true; let ignoreIframeAjaxResponse = true; let timerEnabled = false; let timerTimeoutId = null; let autoUpdateRunning = false; let autoUpdateEndTime = null; let autoUpdateStopTimeoutId = null; let ipSpoofEnabled = false; let ipSpoofMode = 'fixed'; let ipSpoofAddress = ''; let ipSpoofList = []; let ipSpoofRange = ''; let ipSpoofListIndex = 0;
function initCharts() {
function chartConfig(label, type, color, bg) {
return {
type: type,
data: { labels: [], datasets: [{ label, data: [], borderColor: color, backgroundColor: bg, tension: 0.4, fill: true }] },
options: {
responsive: true, maintainAspectRatio: false,
scales: { y: { beginAtZero: true, grid: { color: '#333' }, ticks: { color: '#999' }}, x: { grid: { color: '#333' }, ticks: { color: '#999' }} },
plugins: { legend: { labels: { color: '#999' } } }
}
};
}
speedChart = new Chart(document.getElementById('speedChart').getContext('2d'), chartConfig('通信速度 (KB/s)', 'line', '#4d7d4d', 'rgba(77,125,77,0.1)'));
dataChart = new Chart(document.getElementById('dataChart').getContext('2d'), chartConfig('データ使用量 (KB)', 'bar', '#7d6d4d', 'rgba(125,109,77,0.8)'));
cumulativeDataChart = new Chart(document.getElementById('cumulativeDataChart').getContext('2d'), chartConfig('累積データ容量 (KB)', 'line', '#aaaaaa', 'rgba(51,122,183,0.1)'));
averageSpeedChart = new Chart(document.getElementById('averageSpeedChart').getContext('2d'), chartConfig('平均速度 (KB/s)', 'line', '#b77a33', 'rgba(183,122,51,0.1)'));
}
function updateCharts() {
const now = new Date().toLocaleTimeString();
const currentTime = Date.now();
const timeDiff = (currentTime - lastUpdateTime) / 1000;
const dataDiff = totalDataUsage - lastDataAmount;
currentSpeed = timeDiff > 0 ? (dataDiff / timeDiff) : 0;
let totalUpdateCount = speedData.length + 1;
let totalSpeedSum = speedData.reduce((a,b)=>a+b,0) + currentSpeed;
let avgSpeed = totalUpdateCount > 0 ? totalSpeedSum / totalUpdateCount : 0;
speedData.push(currentSpeed); dataUsageData.push(dataDiff); cumulativeDataData.push(totalDataUsage); averageSpeedData.push(avgSpeed);
if (speedData.length > 20) {
speedData.shift(); dataUsageData.shift(); cumulativeDataData.shift(); averageSpeedData.shift();
speedChart.data.labels.shift(); dataChart.data.labels.shift(); cumulativeDataChart.data.labels.shift(); averageSpeedChart.data.labels.shift();
}
speedChart.data.labels.push(now); speedChart.data.datasets[0].data = [...speedData]; speedChart.update('none');
dataChart.data.labels.push(now); dataChart.data.datasets[0].data = [...dataUsageData]; dataChart.update('none');
cumulativeDataChart.data.labels.push(now); cumulativeDataChart.data.datasets[0].data = [...cumulativeDataData]; cumulativeDataChart.update('none');
averageSpeedChart.data.labels.push(now); averageSpeedChart.data.datasets[0].data = [...averageSpeedData]; averageSpeedChart.update('none');
lastUpdateTime = currentTime; lastDataAmount = totalDataUsage;
}
function updateStats() {
document.getElementById('successCount').textContent = successCount;
document.getElementById('failCount').textContent = failCount;
document.getElementById('currentSpeed').textContent = currentSpeed.toFixed(1) + ' KB/s';
const totalDataElement = document.getElementById('totalData');
if (totalDataUsage < 1024) {
totalDataElement.textContent = totalDataUsage.toFixed(1) + ' KB';
} else {
totalDataElement.textContent = (totalDataUsage / 1024).toFixed(2) + ' MB';
}
const total = successCount + failCount;
const percent = total > 0 ? (successCount / total * 100).toFixed(1) : 0;
document.getElementById('successPercent').textContent = percent + '%';
}
function updateRequestCountUI() {
document.getElementById('requestCountValue').textContent = requestCount;
}
function createIframes(count) {
const iframeGrid = document.getElementById('iframeGrid');
iframeGrid.innerHTML = '';
for (let i = 0; i < count; i++) {
const wrapper = document.createElement('div');
wrapper.className = 'iframe-wrapper';
wrapper.innerHTML =
<h4>iframe ${i + 1}</h4> <iframe id="iframe-${i}" src="about:blank"></iframe> <div class="iframe-status" id="status-${i}">待機中</div>;iframeGrid.appendChild(wrapper);
}
}
function getActiveProxy() {
const type = document.getElementById('proxyType').value;
if (type === "url") {
const url = document.getElementById('proxyUrl').value.trim();
if (url) return { mode: "url", url };
}
if (type === "ip") {
const ip = document.getElementById('proxyIp').value.trim();
const port = document.getElementById('proxyPort').value.trim();
if (ip && port) return { mode: "ip", url:
${ip}:${port}};}
if (type === "auth") {
const user = document.getElementById('proxyAuthUser').value.trim();
const pass = document.getElementById('proxyAuthPass').value;
const ip = document.getElementById('proxyIp').value.trim();
const port = document.getElementById('proxyPort').value.trim();
if (user && pass && ip && port) {
return { mode: "auth", url:
${ip}:${port}, auth: { user, pass } };}
}
return null;
}
function updateSingleIframe(index, url, proxy=null, spoofHeaders={}) {
const iframe = document.getElementById(
iframe-${index});const status = document.getElementById(
status-${index});if (!iframe || !status) return;
requestCount++;
updateRequestCountUI();
status.textContent = '読み込み中...';
status.className = 'iframe-status';
if (proxy || Object.keys(spoofHeaders).length) {
let fetchUrl = url;
let fetchOpts = { headers: spoofHeaders };
if (proxy) {
if (proxy.mode === "url") {
fetchUrl = proxy.url + "?url=" + encodeURIComponent(url);
} else if (proxy.mode === "ip" || proxy.mode === "auth") {
fetchUrl = url;
fetchOpts.mode = "cors";
if (proxy.mode === "auth") {
const basic = btoa(
${proxy.auth.user}:${proxy.auth.pass});fetchOpts.headers = { ...spoofHeaders, 'Proxy-Authorization':
Basic ${basic}};}
}
}
fetch(fetchUrl, fetchOpts)
.then(r => r.text())
.then(html => {
let dataUri = "data:text/html;charset=utf-8," + encodeURIComponent(html);
iframe.src = dataUri;
status.textContent = '読み込み成功';
status.className = 'iframe-status success';
successCount++;
updateStats();
})
.catch(() => {
status.textContent = '読み込み失敗';
status.className = 'iframe-status error';
failCount++;
updateStats();
});
} else {
iframe.onload = function() {
status.textContent = '読み込み成功';
status.className = 'iframe-status success';
successCount++;
updateStats();
};
iframe.onerror = function() {
status.textContent = '読み込み失敗';
status.className = 'iframe-status error';
failCount++;
updateStats();
};
iframe.src = url;
}
}
function updateAllIframes() {
const urlInput = document.getElementById('url');
const url = urlInput.value.trim();
if (!validateUrl(url)) {
alert("有効なURLを入力してください");
return;
}
let normalizedUrl = url;
if (!url.startsWith('http://') && !url.startsWith('https://')) normalizedUrl = 'https://' + url;
let proxy = getActiveProxy();
let spoofHeaders = ipSpoofEnabled ? getSelectedHeaders(getSpoofIP()) : {};
for (let i = 0; i < iframeCount; i++) {
let tUrl = normalizedUrl + (normalizedUrl.includes('?') ? '&' : '?') + 't=' + Date.now() + '_' + i;
setTimeout(() => updateSingleIframe(i, tUrl, proxy, spoofHeaders), randomUpdateEnabled ? Math.random() * 400 : 0);
}
const estimatedSize = Math.floor(Math.random() * 500) + 100;
const totalSize = estimatedSize * iframeCount;
totalDataUsage += totalSize;
updateStats();
updateCharts();
}
function startAutoUpdate() {
if (autoUpdateRunning) return;
autoUpdateRunning = true;
document.getElementById('statusDot').className = 'status-dot running';
document.getElementById('statusText').textContent =
動作中;let interval = parseInt(document.getElementById('updateInterval').value) || 5000;
autoUpdateInterval = setInterval(updateAllIframes, interval);
if (timerEnabled && autoUpdateEndTime && autoUpdateEndTime > Date.now()) {
if (autoUpdateStopTimeoutId) clearTimeout(autoUpdateStopTimeoutId);
let delay = autoUpdateEndTime - Date.now();
autoUpdateStopTimeoutId = setTimeout(() => {
stopAutoUpdate();
document.getElementById('endTimeLabel').textContent = "更新終了時刻: -";
autoUpdateEndTime = null;
}, delay);
}
}
function stopAutoUpdate() {
if (!autoUpdateRunning) return;
autoUpdateRunning = false;
if (autoUpdateInterval) { clearInterval(autoUpdateInterval); autoUpdateInterval = null; }
if (autoUpdateStopTimeoutId) { clearTimeout(autoUpdateStopTimeoutId); autoUpdateStopTimeoutId = null; }
document.getElementById('statusDot').className = 'status-dot stopped';
document.getElementById('statusText').textContent = '停止中';
}
function setUpdateTimer() {
let dateStr = document.getElementById('timerDate').value;
if (!dateStr) {
document.getElementById('timerMessage').textContent = "開始日時を選択してください";
return;
}
let target = new Date(dateStr);
if (isNaN(target.getTime()) || target < new Date()) {
document.getElementById('timerMessage').textContent = "未来日時を選択してください";
return;
}
clearTimeout(timerTimeoutId);
if (timerEnabled) {
let delay = target.getTime() - Date.now();
timerTimeoutId = setTimeout(startAutoUpdate, delay);
document.getElementById('timerMessage').textContent = "タイマー設定済: " + target.toLocaleString();
} else {
document.getElementById('timerMessage').textContent = "タイマーがOFFです";
}
document.getElementById('endTimeLabel').textContent = autoUpdateEndTime ? "更新終了時刻: " + new Date(autoUpdateEndTime).toLocaleString() : "更新終了時刻: -";
}
function setEndTime() {
let dateStr = document.getElementById('endTimeInput').value;
if (!dateStr) {
alert("終了時刻を入力してください");
return;
}
let end = new Date(dateStr);
if (isNaN(end.getTime()) || end < new Date()) {
alert("未来日時を選択してください");
return;
}
if (timerEnabled) {
autoUpdateEndTime = end.getTime();
document.getElementById('endTimeLabel').textContent = "更新終了時刻: " + end.toLocaleString();
if (autoUpdateRunning) {
if (autoUpdateStopTimeoutId) clearTimeout(autoUpdateStopTimeoutId);
let delay = autoUpdateEndTime - Date.now();
autoUpdateStopTimeoutId = setTimeout(() => {
stopAutoUpdate();
document.getElementById('endTimeLabel').textContent = "更新終了時刻: -";
autoUpdateEndTime = null;
}, delay);
}
} else {
document.getElementById('endTimeLabel').textContent = "タイマーがOFFです";
}
}
function updateTimerToggleStatus() {
const startInput = document.getElementById('timerDate').value;
const endInput = document.getElementById('endTimeInput').value;
const timerToggle = document.getElementById('timerToggle');
const timerStatus = document.getElementById('timerToggleStatus');
const canEnable = !!startInput || !!endInput;
timerToggle.classList.toggle('disabled', !canEnable);
timerToggle.style.opacity = canEnable ? "1" : "0.5";
timerToggle.style.pointerEvents = canEnable ? "auto" : "none";
timerStatus.textContent = timerEnabled ? 'ON' : 'OFF';
timerStatus.classList.toggle('active', timerEnabled);
}
function toggleTimerSection() {
const startInput = document.getElementById('timerDate').value;
const endInput = document.getElementById('endTimeInput').value;
if (!startInput && !endInput) return;
timerEnabled = !timerEnabled;
const toggle = document.getElementById('timerToggle');
const status = document.getElementById('timerToggleStatus');
if (timerEnabled) {
toggle.classList.add('active'); status.textContent = 'ON'; status.classList.add('active');
setUpdateTimer();
setEndTime();
} else {
toggle.classList.remove('active'); status.textContent = 'OFF'; status.classList.remove('active');
if (timerTimeoutId) { clearTimeout(timerTimeoutId); timerTimeoutId = null; }
if (autoUpdateStopTimeoutId) { clearTimeout(autoUpdateStopTimeoutId); autoUpdateStopTimeoutId = null; }
document.getElementById('timerMessage').textContent = "タイマーがOFFです";
document.getElementById('endTimeLabel').textContent = "更新終了時刻: -";
}
updateTimerToggleStatus();
}
function clearHistory() {
totalDataUsage = 0;
successCount = 0;
failCount = 0;
currentSpeed = 0;
speedData = []; dataUsageData = []; cumulativeDataData = []; averageSpeedData = [];
updateStats();
updateCharts();
}
function validateUrl(url) {
return /^(https?://)[\w.-]+(.[\w.-]+)+(:\d+)?(/.*)?$/.test(url);
}
function toggleRandomUpdateUI() {
randomUpdateEnabled = !randomUpdateEnabled;
const toggle = document.getElementById('randomToggle');
const status = document.getElementById('randomToggleStatus');
if (randomUpdateEnabled) { toggle.classList.add('active'); status.textContent = 'ON'; status.classList.add('active'); }
else { toggle.classList.remove('active'); status.textContent = 'OFF'; status.classList.remove('active'); }
}
function toggleIframeResponseIgnoreUI() {
ignoreIframeAjaxResponse = !ignoreIframeAjaxResponse;
const toggle = document.getElementById('iframeResponseToggle');
const status = document.getElementById('iframeResponseToggleStatus');
if (ignoreIframeAjaxResponse) { toggle.classList.add('active'); status.textContent = 'ON'; status.classList.add('active'); }
else { toggle.classList.remove('active'); status.textContent = 'OFF'; status.classList.remove('active'); }
}
function toggleIpSpoofUI() {
ipSpoofEnabled = !ipSpoofEnabled;
document.getElementById('ipSpoofToggle').classList.toggle('active', ipSpoofEnabled);
document.getElementById('ipSpoofToggleStatus').textContent = ipSpoofEnabled ? 'ON' : 'OFF';
document.getElementById('ipSpoofToggleStatus').classList.toggle('active', ipSpoofEnabled);
}
function updateIpSpoofModeUI() {
ipSpoofMode = document.getElementById('ipSpoofMode').value;
document.querySelector('.ip-spoof-fixed').style.display = (ipSpoofMode==='fixed') ? '' : 'none';
document.querySelector('.ip-spoof-list').style.display = (ipSpoofMode==='preset' || ipSpoofMode==='rotate') ? '' : 'none';
document.querySelector('.ip-spoof-range').style.display = (ipSpoofMode==='random') ? '' : 'none';
}
function getSpoofIP() {
if(ipSpoofMode==='fixed') return ipSpoofAddress;
if(ipSpoofMode==='preset') {
if(ipSpoofList.length===0) return '';
return ipSpoofList[Math.floor(Math.random()*ipSpoofList.length)];
}
if(ipSpoofMode==='rotate') {
if(ipSpoofList.length===0) return '';
let ip = ipSpoofList[ipSpoofListIndex % ipSpoofList.length];
ipSpoofListIndex++;
return ip;
}
if(ipSpoofMode==='random' && ipSpoofRange) {
let [ip, cidr] = ipSpoofRange.split('/');
let parts = ip.split('.').map(x=>parseInt(x));
let mask = 32 - (parseInt(cidr)||24);
let maxHost = Math.pow(2,mask)-1;
let rand = Math.floor(Math.random()*maxHost);
let base = (parts[0]<<24)+(parts[1]<<16)+(parts[2]<<8);
let n = base + rand;
return
${(n>>24)&255}.${(n>>16)&255}.${(n>>8)&255}.${n&255};}
return '';
}
function getSelectedHeaders(ip) {
let headers = {};
if(document.getElementById('headerXForwardedFor').checked) headers['X-Forwarded-For'] = ip;
if(document.getElementById('headerClientIP').checked) headers['Client-IP'] = ip;
if(document.getElementById('headerXRealIP').checked) headers['X-Real-IP'] = ip;
return headers;
}
document.addEventListener('DOMContentLoaded', function() {
initCharts();
updateStats();
createIframes(iframeCount);
});
</script>
Beta Was this translation helpful? Give feedback.
All reactions