Fingerprints
Згенерувати новий відбиток (ОС хоста)
http://127.0.0.1:40325/fingerprint/newПовертає повністю унікалізований відбиток для хостової
операційної системи без збереження. Еквівалентно виклику
/fingerprint/new/{platform} з платформою хоста.
Постійний JWT з Settings → Automation API.
200Унікалізований, не збережений відбиток.application/json
fingerprintobject · FingerprintrequiredНативний FingerprintConfig. Задокументовані підоб'єкти; найпоширеніші;
об'єкт відкритий і зберігається ендпоінтами створення
дослівно, тому будь-яке поле тут буде передано без змін.
Show propertiesHide properties
Нативний FingerprintConfig. Задокументовані підоб'єкти; найпоширеніші; об'єкт відкритий і зберігається ендпоінтами створення дослівно, тому будь-яке поле тут буде передано без змін.
0 = режим лише перевизначень (типовий випадок).
navigatorobjectoptionalShow propertiesHide properties
81632screenobjectoptionalShow propertiesHide properties
srgbp3rec2020Заявлена частота оновлення екрана. Якщо поле не вказано, використовується 60. Див. поле refresh_rate у запитах створення та редагування.
client_hintsobjectoptionalСімейство Sec-CH-UA (у browser.vision називається hints).
Show propertiesHide properties
Сімейство Sec-CH-UA (у browser.vision називається hints).
webglobjectoptionalShow propertiesHide properties
Режим обробки WebRTC.
autotcp_onlyblocknoiseobject · NoisePrefsoptionalНалаштування антифінгерпринт-шуму за векторами. Кожен блок: {enabled, seed}
(+ специфічні параметри). enabled:false = наскрізна передача.
Show propertiesHide properties
Налаштування антифінгерпринт-шуму за векторами. Кожен блок: {enabled, seed}
(+ специфічні параметри). enabled:false = наскрізна передача.
canvasobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
webglobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
audioobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
client_rectsobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
sensorsobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
fontsobject · NoiseBlockoptionalenabled:true приховує невелике детерміноване підмножество
несуттєвих шрифтів для кожного профілю (решта реальних шрифтів
хоста проходять наскрізь).
Show propertiesHide properties
enabled:true приховує невелике детерміноване підмножество
несуттєвих шрифтів для кожного профілю (решта реальних шрифтів
хоста проходять наскрізь).
Ентропія на профіль; 0 = обчислити автоматично.
networkobjectoptionalShow propertiesHide properties
Захист від сканування портів локальної мережі (ports_protection).
Ім'я за IANA або "auto"; буде визначено через прив'язаний проксі при запуску.
401Відсутній або недійсний Bearer-токен.
404Бібліотека відбитків порожня.application/json
/fingerprint/newGET /fingerprint/new HTTP/1.1
Host: 127.0.0.1:40325
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*curl -X GET 'http://127.0.0.1:40325/fingerprint/new' \
-H 'Authorization: Bearer YOUR_SECRET_TOKEN'import requests
# Постійний JWT з Settings → Automation API.
token = "YOUR_SECRET_TOKEN"
url = "http://127.0.0.1:40325/fingerprint/new"
headers = {
"Authorization": f"Bearer {token}",
}
response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status()
print(response.status_code)
print(response.text)// Постійний JWT з Settings → Automation API.
const token = "YOUR_SECRET_TOKEN";
const url = "http://127.0.0.1:40325/fingerprint/new";
const response = await fetch(url, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
},
});
console.log(response.status);
console.log(await response.text());package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
// Постійний JWT з Settings → Automation API.
token := "YOUR_SECRET_TOKEN"
url := "http://127.0.0.1:40325/fingerprint/new"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
out, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Status)
fmt.Println(string(out))
}// Cargo.toml: reqwest = { version = "0.12", features = ["json"] }, tokio = { version = "1", features = ["full"] }
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Постійний JWT з Settings → Automation API.
let token = "YOUR_SECRET_TOKEN";
let client = reqwest::Client::new();
let response = client
.get("http://127.0.0.1:40325/fingerprint/new")
.header("Authorization", format!("Bearer {token}"))
.send()
.await?;
println!("{}", response.status());
println!("{}", response.text().await?);
Ok(())
}using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// Постійний JWT з Settings → Automation API.
var token = "YOUR_SECRET_TOKEN";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var request = new HttpRequestMessage(HttpMethod.Get, "http://127.0.0.1:40325/fingerprint/new");
var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}// build: c++ -std=c++17 main.cpp -lcurl
#include <curl/curl.h>
#include <iostream>
#include <string>
static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *userdata) {
static_cast<std::string *>(userdata)->append(ptr, size * nmemb);
return size * nmemb;
}
int main() {
// Постійний JWT з Settings → Automation API.
const std::string token = "YOUR_SECRET_TOKEN";
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if (!curl) {
std::cerr << "curl_easy_init failed\n";
curl_global_cleanup();
return 1;
}
struct curl_slist *headers = nullptr;
headers = curl_slist_append(headers, ("Authorization: Bearer " + token).c_str());
std::string response;
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:40325/fingerprint/new");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
const CURLcode rc = curl_easy_perform(curl);
if (rc != CURLE_OK) {
std::cerr << curl_easy_strerror(rc) << "\n";
} else {
long status = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
std::cout << status << "\n" << response << "\n";
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_global_cleanup();
return rc == CURLE_OK ? 0 : 1;
}{
"fingerprint": {
"name": "text",
"notes": "text",
"seed": 1,
"navigator": {
"user_agent": "text",
"platform": "Win32",
"hardware_concurrency": 12,
"device_memory": 16,
"language": "text",
"do_not_track": true
},
"screen": {
"width": 1,
"height": 1,
"avail_width": 1,
"avail_height": 1,
"color_depth": 24,
"device_pixel_ratio": 2,
"color_gamut": "",
"refresh_rate": 60
},
"client_hints": {
"platform": "text",
"platform_version": "text",
"architecture": "x86",
"bitness": "64",
"mobile": true
},
"webgl": {
"unmasked_vendor": "text",
"unmasked_renderer": "text"
},
"webgpu": {},
"webrtc": "auto",
"noise": {
"canvas": {
"enabled": true,
"seed": 1
},
"webgl": {
"enabled": true,
"seed": 1,
"intensity": 1
},
"audio": {
"enabled": true,
"seed": 1,
"intensity": 1
},
"client_rects": {
"enabled": true,
"seed": 1,
"max_offset": 1
},
"sensors": {
"enabled": true,
"seed": 1
},
"fonts": {
"enabled": true,
"seed": 1
}
},
"network": {
"blocked_ports": [
1
]
},
"timezone": "text"
}
}{
"error": "text"
}Згенерувати новий відбиток для заданої платформи
http://127.0.0.1:40325/fingerprint/new/{platform}Вибирає випадковий відбиток з бібліотеки, що відповідає platform,
потім унікалізує його: нова platform_version для Sec-CH-UA,
hardware_concurrency/device_memory з урахуванням хоста (не перевищують
реальні значення машини), екран, обрізаний під реальний дисплей.
Повертається без збереження; передайте як fingerprint в ендпоінт створення.
Постійний JWT з Settings → Automation API.
Регістронезалежно; приймаються псевдоніми win/osx/darwin.
WindowsmacOSLinux200Унікалізований, не збережений відбиток.application/json
fingerprintobject · FingerprintrequiredНативний FingerprintConfig. Задокументовані підоб'єкти; найпоширеніші;
об'єкт відкритий і зберігається ендпоінтами створення
дослівно, тому будь-яке поле тут буде передано без змін.
Show propertiesHide properties
Нативний FingerprintConfig. Задокументовані підоб'єкти; найпоширеніші; об'єкт відкритий і зберігається ендпоінтами створення дослівно, тому будь-яке поле тут буде передано без змін.
0 = режим лише перевизначень (типовий випадок).
navigatorobjectoptionalShow propertiesHide properties
81632screenobjectoptionalShow propertiesHide properties
srgbp3rec2020Заявлена частота оновлення екрана. Якщо поле не вказано, використовується 60. Див. поле refresh_rate у запитах створення та редагування.
client_hintsobjectoptionalСімейство Sec-CH-UA (у browser.vision називається hints).
Show propertiesHide properties
Сімейство Sec-CH-UA (у browser.vision називається hints).
webglobjectoptionalShow propertiesHide properties
Режим обробки WebRTC.
autotcp_onlyblocknoiseobject · NoisePrefsoptionalНалаштування антифінгерпринт-шуму за векторами. Кожен блок: {enabled, seed}
(+ специфічні параметри). enabled:false = наскрізна передача.
Show propertiesHide properties
Налаштування антифінгерпринт-шуму за векторами. Кожен блок: {enabled, seed}
(+ специфічні параметри). enabled:false = наскрізна передача.
canvasobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
webglobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
audioobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
client_rectsobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
sensorsobject · NoiseBlockoptionalShow propertiesHide properties
Ентропія на профіль; 0 = обчислити автоматично.
fontsobject · NoiseBlockoptionalenabled:true приховує невелике детерміноване підмножество
несуттєвих шрифтів для кожного профілю (решта реальних шрифтів
хоста проходять наскрізь).
Show propertiesHide properties
enabled:true приховує невелике детерміноване підмножество
несуттєвих шрифтів для кожного профілю (решта реальних шрифтів
хоста проходять наскрізь).
Ентропія на профіль; 0 = обчислити автоматично.
networkobjectoptionalShow propertiesHide properties
Захист від сканування портів локальної мережі (ports_protection).
Ім'я за IANA або "auto"; буде визначено через прив'язаний проксі при запуску.
401Відсутній або недійсний Bearer-токен.
404Підходящий відбиток не знайдено або бібліотека порожня.application/json
/fingerprint/new/WindowsGET /fingerprint/new/Windows HTTP/1.1
Host: 127.0.0.1:40325
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*curl -X GET 'http://127.0.0.1:40325/fingerprint/new/Windows' \
-H 'Authorization: Bearer YOUR_SECRET_TOKEN'import requests
# Постійний JWT з Settings → Automation API.
token = "YOUR_SECRET_TOKEN"
url = "http://127.0.0.1:40325/fingerprint/new/Windows"
headers = {
"Authorization": f"Bearer {token}",
}
response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status()
print(response.status_code)
print(response.text)// Постійний JWT з Settings → Automation API.
const token = "YOUR_SECRET_TOKEN";
const url = "http://127.0.0.1:40325/fingerprint/new/Windows";
const response = await fetch(url, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
},
});
console.log(response.status);
console.log(await response.text());package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
// Постійний JWT з Settings → Automation API.
token := "YOUR_SECRET_TOKEN"
url := "http://127.0.0.1:40325/fingerprint/new/Windows"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
out, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Status)
fmt.Println(string(out))
}// Cargo.toml: reqwest = { version = "0.12", features = ["json"] }, tokio = { version = "1", features = ["full"] }
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Постійний JWT з Settings → Automation API.
let token = "YOUR_SECRET_TOKEN";
let client = reqwest::Client::new();
let response = client
.get("http://127.0.0.1:40325/fingerprint/new/Windows")
.header("Authorization", format!("Bearer {token}"))
.send()
.await?;
println!("{}", response.status());
println!("{}", response.text().await?);
Ok(())
}using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// Постійний JWT з Settings → Automation API.
var token = "YOUR_SECRET_TOKEN";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var request = new HttpRequestMessage(HttpMethod.Get, "http://127.0.0.1:40325/fingerprint/new/Windows");
var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}// build: c++ -std=c++17 main.cpp -lcurl
#include <curl/curl.h>
#include <iostream>
#include <string>
static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *userdata) {
static_cast<std::string *>(userdata)->append(ptr, size * nmemb);
return size * nmemb;
}
int main() {
// Постійний JWT з Settings → Automation API.
const std::string token = "YOUR_SECRET_TOKEN";
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if (!curl) {
std::cerr << "curl_easy_init failed\n";
curl_global_cleanup();
return 1;
}
struct curl_slist *headers = nullptr;
headers = curl_slist_append(headers, ("Authorization: Bearer " + token).c_str());
std::string response;
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:40325/fingerprint/new/Windows");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
const CURLcode rc = curl_easy_perform(curl);
if (rc != CURLE_OK) {
std::cerr << curl_easy_strerror(rc) << "\n";
} else {
long status = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
std::cout << status << "\n" << response << "\n";
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_global_cleanup();
return rc == CURLE_OK ? 0 : 1;
}{
"fingerprint": {
"name": "text",
"notes": "text",
"seed": 1,
"navigator": {
"user_agent": "text",
"platform": "Win32",
"hardware_concurrency": 12,
"device_memory": 16,
"language": "text",
"do_not_track": true
},
"screen": {
"width": 1,
"height": 1,
"avail_width": 1,
"avail_height": 1,
"color_depth": 24,
"device_pixel_ratio": 2,
"color_gamut": "",
"refresh_rate": 60
},
"client_hints": {
"platform": "text",
"platform_version": "text",
"architecture": "x86",
"bitness": "64",
"mobile": true
},
"webgl": {
"unmasked_vendor": "text",
"unmasked_renderer": "text"
},
"webgpu": {},
"webrtc": "auto",
"noise": {
"canvas": {
"enabled": true,
"seed": 1
},
"webgl": {
"enabled": true,
"seed": 1,
"intensity": 1
},
"audio": {
"enabled": true,
"seed": 1,
"intensity": 1
},
"client_rects": {
"enabled": true,
"seed": 1,
"max_offset": 1
},
"sensors": {
"enabled": true,
"seed": 1
},
"fonts": {
"enabled": true,
"seed": 1
}
},
"network": {
"blocked_ports": [
1
]
},
"timezone": "text"
}
}{
"error": "text"
}Список відбитків бібліотеки
http://127.0.0.1:40325/fingerprintsБібліотека відбитків на диску (GPU-пресети), що постачається/імпортується лаунчером.
Постійний JWT з Settings → Automation API.
200Записи бібліотеки.application/json
WindowsmacOSLinuxРядок версії Chrome.
Входить у поставляємий стартовий набір.
401Відсутній або недійсний Bearer-токен.
/fingerprintsGET /fingerprints HTTP/1.1
Host: 127.0.0.1:40325
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*curl -X GET 'http://127.0.0.1:40325/fingerprints' \
-H 'Authorization: Bearer YOUR_SECRET_TOKEN'import requests
# Постійний JWT з Settings → Automation API.
token = "YOUR_SECRET_TOKEN"
url = "http://127.0.0.1:40325/fingerprints"
headers = {
"Authorization": f"Bearer {token}",
}
response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status()
print(response.status_code)
print(response.text)// Постійний JWT з Settings → Automation API.
const token = "YOUR_SECRET_TOKEN";
const url = "http://127.0.0.1:40325/fingerprints";
const response = await fetch(url, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
},
});
console.log(response.status);
console.log(await response.text());package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
// Постійний JWT з Settings → Automation API.
token := "YOUR_SECRET_TOKEN"
url := "http://127.0.0.1:40325/fingerprints"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
out, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Status)
fmt.Println(string(out))
}// Cargo.toml: reqwest = { version = "0.12", features = ["json"] }, tokio = { version = "1", features = ["full"] }
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Постійний JWT з Settings → Automation API.
let token = "YOUR_SECRET_TOKEN";
let client = reqwest::Client::new();
let response = client
.get("http://127.0.0.1:40325/fingerprints")
.header("Authorization", format!("Bearer {token}"))
.send()
.await?;
println!("{}", response.status());
println!("{}", response.text().await?);
Ok(())
}using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// Постійний JWT з Settings → Automation API.
var token = "YOUR_SECRET_TOKEN";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var request = new HttpRequestMessage(HttpMethod.Get, "http://127.0.0.1:40325/fingerprints");
var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}// build: c++ -std=c++17 main.cpp -lcurl
#include <curl/curl.h>
#include <iostream>
#include <string>
static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *userdata) {
static_cast<std::string *>(userdata)->append(ptr, size * nmemb);
return size * nmemb;
}
int main() {
// Постійний JWT з Settings → Automation API.
const std::string token = "YOUR_SECRET_TOKEN";
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if (!curl) {
std::cerr << "curl_easy_init failed\n";
curl_global_cleanup();
return 1;
}
struct curl_slist *headers = nullptr;
headers = curl_slist_append(headers, ("Authorization: Bearer " + token).c_str());
std::string response;
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:40325/fingerprints");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
const CURLcode rc = curl_easy_perform(curl);
if (rc != CURLE_OK) {
std::cerr << curl_easy_strerror(rc) << "\n";
} else {
long status = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
std::cout << status << "\n" << response << "\n";
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl_global_cleanup();
return rc == CURLE_OK ? 0 : 1;
}[
{
"id": "text",
"label": "text",
"platform": "Windows",
"chrome": "text",
"gpu": "text",
"builtin": true
}
]Оновлено