Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
판매 시점 모델, OS 버전, 브라우저와 사용자 에이전트, IP 주소를 일치시키는 C++23 헤더‑온리 결정적 디바이스 생성기입니다
Devices, browsers, user agents and IP addresses that fit together: a model on sale at the date, an OS version it runs, a browser for it and the user agent it sends. C++23, header-only, deterministic.
개발 도구C++ · PythonGitHub @dasmig온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Requires C++23 (e.g.,
-std=c++23for GCC/Clang,/std:c++latestfor MSVC).
API Reference · Usage Guide · Data and Method · Releases
Devices, browsers, user agents and IP addresses that fit together: a phone model that was on sale at the date, running an OS version it supports, a browser that runs on that OS at a version released by then, the user-agent string that exact combination sends, its screen, and an address registered in the person's country.
Chrome 114 on Android 13 (Samsung Galaxy A14), 178.46.39.249
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36
Everything Agrees. The model came out before the reference date, the OS version is one the model runs, the browser runs on that OS version (Chrome 110 and later need Windows 10; Safari only on Apple systems; every iOS browser is WebKit), and versions are those released by the date, with newer ones spreading as they really do.
Real User Agents. Strings follow each browser's format at that version: Chrome's reduced user agent from version 110 on Android (Android 10; K), the minor-version zeros from 101, Apple's frozen 18_6 token from iOS 26, CriOS, FxiOS and EdgiOS on iOS, iPad Safari asking for the desktop site. Chrome, Safari, Edge, Firefox, Samsung Internet, Opera and Yandex Browser. Checked against ua-parser, which reads back the browser, its major version and the OS for every generated string.
Client Hints. Chrome and Edge also get the Sec-CH-UA, Sec-CH-UA-Mobile and Sec-CH-UA-Platform headers they send with every request, with the brand list ordered and spelled by the version as Chromium does it ("Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120").
Real Addresses, or Safe Ones. IPv4 and IPv6 addresses come from the blocks the five regional registries list for the country, weighted by size, never from special-purpose ranges. safe gives documentation addresses only (RFC 5737, RFC 3849), so test data reaches no one.
Any Date. A reference_date from 2021 on picks the devices, OS and browser versions of that day, and maker and browser shares follow their trends (Huawei's fall outside China, Edge's rise on Windows); the library never reads the clock.
Ask for What You Need. A device_request can fix the country, the platform (user-generator's keys), the kind, the browser, the IP family and the locale (for Accept-Language). What is left out is drawn, and fixing one part leaves the others' draws unchanged.
Deterministic Seeding. Per-call get_device(request, seed) for reproducible results, and device::seed() for replaying a previous generation with the same request and data.
Batch Generation. Generate thousands of results from one seed, on several threads with the same output for any thread count, optionally unique by a key such as the IP, and stream them as JSON Lines or CSV (see the usage guide).
devicegen.hpp is the library released here. Keep core.hpp and the core/ directory (dasmig-core) in the same directory. Add
#include <dasmig/devicegen.hpp>
to the files you want to use it in, and supply the resources folder (or define DASMIG_DEVICE_EMBED).
#include <dasmig/devicegen.hpp>
#include <iostream>
auto& gen = dasmig::dvg::instance(); // loads the lite tier
auto d = gen.get_device(dasmig::device_request{});
std::cout << d << '\n'; // Chrome 114 on Android 13 (Samsung Galaxy A14), 178.46.39.249
std::cout << d.user_agent << '\n'; // the User-Agent header
std::cout << d.to_json() << '\n'; // every field, with the seed
dasmig::device_request request;
request.country = "BR";
request.platform = "ios-phone"; // user-generator's platform keys
request.locale = "pt-BR"; // Accept-Language: pt-BR,pt;q=0.9,en;q=0.8
request.reference_date = std::chrono::year{2026} / 10 / 1;
request.safe = true; // a documentation address
auto iphone = gen.get_device(request, 42);
// The same seed gives the same result everywhere.
auto again = gen.get_device(request, iphone.seed());
See the usage guide for everything else.
make # example
make test # tests
make bench # benchmarks, results in build/bench.tsv
make test-embed # tests with the lite tier compiled in
make coverage # code coverage
make lint # clang-tidy
make docs # API docs
make embed # regenerate dasmig/devicegen_data.hpp from resources/lite
Tested with:
-std=c++23)-std=c++23)/std:c++latest)| Dependency | Version | Bundled | Purpose |
|---|---|---|---|
| dasmig-core | 1.4 | Yes (core.hpp, core/) | Platform-independent random engine and distributions, data layers, JSON |
| Catch2 | 3.x | Yes (amalgamated) | Unit testing |
| Library | Description |
|---|---|
| address-generator | Postal addresses with real streets by place |
| biodata-generator | Procedural human physical characteristics |
| birth-generator | Demographically plausible birthdays |
| city-generator | Weighted city selection by population |
| country-generator | Weighted country selection by population |
| email-generator | Email addresses in each country's style |
| entity-generator | ECS-based entity generation |
| interest-generator | Religion, hobbies and favourite media by country, age and sex |
| name-generator | Culturally appropriate full names |
| nickname-generator | Gamer-style nicknames |
| occupation-generator | Employment status, education and occupation by country, age and sex |
| persona-generator |
This library is released under the MIT License. The data's sources are listed in LICENSE_DATA.txt and doc/data.md.
MIT License
Copyright (c) 2026 Diego Dasso Migotto
Identical Everywhere. A seed gives the same result on every compiler, standard library and CPU (GCC, Clang, MSVC, Emscripten; x86-64 and ARM64), checked by known-answer tests.
Extensible Data. Sixteen TSV tables (models, releases, shares, user-agent templates, IP blocks, ...) that you can extend with layers (extend()), checked before they are applied.
JSON and Replay. to_json() on every result, and a signature() recording the seed and the data it came from.
Compiled-in Data. Define DASMIG_DEVICE_EMBED to build the lite tier into the program, for WebAssembly and other builds without files.
Multi-Instance Support. Construct independent dvg instances with their own data and random engine.
| Complete characters composed from the other generators |
| phone-generator | Phone numbers valid in each country's numbering plan |
| relationship-generator | Families around a person: parents, siblings, partners and children |
| trait-generator | Personality traits with conflicts, synergies and Big Five axes |
| user-generator | Complete user records: account, username, email, phone and address |