HCPP DEV | (uint8_t)0x539
71 subscribers
327 photos
43 videos
69 files
296 links
Разработка на С++
в Visual Studio 2026 Community
И немного хуйни
пиздатый сайт мой https://hcpp20334.github.io
пиздатый гитхаб https://github.com/hcpp20334

помочь проекту
https://donationalerts.com/r/hcpp
Download Telegram
Потому что Роскомпозор сыны шлюх
АХАХААХАХАХАХХА
Media is too big
VIEW IN TELEGRAM
создаем свой ping (Windows/Linux)
net.hpp
#pragma once
#include <iostream>
#include <vector>
#include <cstring>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <thread>
#include <format>
#include <atomic>
#include "io.hpp" // если используете C++23 то отключите просто у меня свой print
#include <mutex>
#include <chrono>
#include "hostname.hpp"
#pragma comment(lib,"ws2_32.lib")
std::mutex net_mt;
struct net {
const char* target_ip = "142.251.1.102";
int target_port = 443;
size_t PACKET_SIZE = 64;
SOCKET sock = INVALID_SOCKET;
sockaddr_in addr;
int64_t max_iteration = 10;
int success = 0, fall = 0, max_packets = 0;
bool bMultiThread = false;
std::string out_ping_str = "";
int64_t i64MaxThreads = std::jthread::hardware_concurrency();
net() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
print(" WSAStartup failed\n");
}
}

void sendDeep() {
setlocale(LC_ALL, "rus");
success = 0; fall = 0;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
print(" Socket creation failed\n");
return;
}
else {
print(" socket created\n");
}

addr.sin_family = AF_INET;
addr.sin_port = htons(target_port);
addr.sin_addr.s_addr = inet_addr(target_ip);

print(" Connecting to [{}]...\n", target_ip);


if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
std::vector<char> buf(PACKET_SIZE, 'X');
for (int64_t count = 0; count < max_iteration; count++) {
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
auto in_ping = std::chrono::high_resolution_clock::now();
if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
int sentBytes = send(s, buf.data(), (int)buf.size(), 0);

auto out_ping = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(out_ping - in_ping).count();
print(" {} [{}] Отправлен пакет: {} ms\n", count, target_ip, duration);
success++;
closesocket(s);
}
else {
print(" {} [{}] Ошибка подключения\n", count, target_ip);
fall++;
closesocket(s);
}
}
print(" [{}] Сводка: Отправлено {}/{} ping : {}\n", target_ip, success, max_iteration, out_ping_str);
closesocket(sock);
}
else {
int err = WSAGetLastError();
print(" [{}:{}] Connection Error! Code: {}\n", target_ip, target_port, err);
std::cout << " Пока не поддерживаем пинг по URL но вот айпи вот айпи ниже";
print("({}) ->( {} )", target_ip, getIPFromUrl(target_ip));
}

}
~net() {
WSACleanup();
print(" WSACleanup()\n");
}
};

main.cpp
#include "ping.hpp"
struct PING_DATA {
std::string usage_string = R"(
Ошибка команды!
Использование:
ping.exe <флаг> <ip или url> <порт> <размер пакета> <количество пакетов>
-----------------------------------------------------------------

Пример:
ping.exe -host "http://google.com" 80 64 4
| 0 || 1 || 2| 3|4|
0 - Флаг (-ip - для теста по IP , -host - для теста по url
1 - Адрес
2 - Порт
3 - размер пакета
4 - количество пакетов
-------------------------------------------------------------------
created by HCPP20334 | Writtein C++20 Win10SDK
)";
};
std::unique_ptr<PING_DATA> ping = std::make_unique<PING_DATA>();
std::unique_ptr<net>net_ptr = std::make_unique<net>();
std::string hostname_and_ip_str,flag_ping_to;
int main(int argc, char** argv) {
setlocale(LC_ALL, "rus");
if (argc < 2) {
std::cout << ping->usage_string;
}
else {

// flag_ping_to = std::string(reinterpret_cast<const char*>((argv[2])));
print("ping by HCPP20334 | Writtein to C++20\n----------------------\n IP:{} | PORT:{} | MAX_ITERATION:{} | PACKET_SIZE:{}\n", (const char*)argv[1], std::stoi(argv[2]), std::stoi(argv[4]), std::stoll(argv[3]));
hostname_and_ip_str = std::string(reinterpret_cast<const char*>((argv[1])));
net_ptr->target_ip = hostname_and_ip_str.c_str();
net_ptr->target_port = (std::stoi(argv[2]));
net_ptr->PACKET_SIZE = (std::stoll(argv[3]));
net_ptr->max_iteration = (std::stoi(argv[4]));
net_ptr->sendDeep();
}
}

ping.hpp
#pragma once
#include <iostream>
#include <string>
#include <stdint.h>
#include <memory>
#include "net.hpp"


ВОТ свой принт

std::mutex deepPayloadMt;
std::string print_data;
template <class... Tm>
void print(const std::format_string<Tm...> _Fmt, Tm&&... _Args) {
std::lock_guard<std::mutex> lock(deepPayloadMt);
std::string_view out_buffer = _STD vformat(_Fmt.get(), _STD make_format_args(_Args...));
std::cout << out_buffer.data();
}

требования С++20 или С++23
raw строки в C++
// default string
std::string raw_string = R"(
Hello World
Hello World
string
)";
// wide string
std::wstring raw_wstring = LR"(
Hello World
Hello World
wstring
)";
преобразование в string в wstring в С++

std::wstring wdata = std::wstring(sdata.begin(),sdata.end());
Получение всех newline в строке в С++

const std::string_view tx = "0. Text\n"
"1. Text\n"
"2. Text\n"
"3. Text\n"
"4. Text\n";
int count = 0;
for(auto c : tx){
if(c == '\n'){count++;}
}
std::print("tx-size:{}, new_line:{}",tx.size(),count);
//auto как универсальный нож для все типов
//просто копирование типа
std::vector<int> offsets = {4,3,6};
auto offset_0 = offsets[0];
offset_0 = 55;
//копирование с сохранение ссылки на объект
std::vector<int> offsets = {4,3,6};
auto& offset_0 = offsets[0];
offset_0 = 55;
//ссылка без копии
int64_t i64Data = 512LL;
const auto& data_const = i64Data;
//и кстати так можно защитить от изменении или использовать для перебора циклом
//вывод типа как у выражение с помощью decltype(auto)
int64_t a64 = 8;
int64_t &b64 = a64;
decltype(auto) c = r;
//почти "auto" но для шаблонов
using ty0 = int64_t&;
using ty1 = std::decay_t<ty0>;
if(std::is_same_v<ty1,int64_t>){
// этоn тип является int64_t
}
//можно проверить тип в auto c помощью std::is_same_v
int64_t data_i64 = 43;
auto &x = data_i64;
if(std::is_same_v<x,int64_t>){
// этоn тип является int64_t
}
std::string_view это красивый нож но хрупкий при неправильном обращении 


//это тот же стринг но без std::allocator Но не выделяет память под себя и живет пока данные живы в нем

//лучше использовать как константные массивы или строки

const std::string_view strv = "hello";
//передавать данные в него лучше через std::string
//использовать std::format с осторожностью так как если данных в std::format не будет то он передаст нулевой //указатель и это UB поэтому есть термин висячий указатель
кто хочет попиздеть то заходите на стрим
Потоки в С++

std::jthread thread_0;
thread_0 = std::jthread([&]{
//твой код
});
std::jthread::hardware_concurrency() //получает количество потоков в процессоре
thread_0.joinable()// возвращает true если поток активен , false если не активен



например

#include <print>
#include <atomic>
#include <stdint.h>
#include <chrono>
#include <thread>

std::atomic<int64_t> counter_big = 0;
std::jthread thread;
int main(){
thread = std::jthread([&]{
while(true){
std::this_thread::sleep_for(std::chrono::milliseconds(1));
counter_big.fetch_add(1);
if(counter_big.load() >= 100){counter_big = 100;break;}
std::print("counter: {}",counter_big.load());
}
});
return 0;
}
Forwarded from HCPP DEV
vless://591f9533-ae76-4c8b-a231-b5dfa0b5df4f@84.201.153.107:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=max.ru&fp=chrome&pbk=47ZlH965WLutAf4l6hCcrMjubX2gHDwzpv3tyNUSO3I&sid=&packetEncoding=xudp#2%20%7C%20%F0%9F%87%B7%F0%9F%87%BA%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%20%7C%20%F0%9F%8F%B3%EF%B8%8F%20%F0%9F%8D%BF


vless://9b6d037b-14e5-4469-b48f-eeb10cfcc6c0@wl-ru-2.midiopenners.ru:443?encryption=none&security=reality&sni=gosuslugi.ru&fp=chrome&pbk=YnG1LDJQElY4N4O2n0VIJfj2qPZkgOBjYPQd0TZIRC4&sid=a1b2c1d3&type=xhttp&host=gosuslugi.ru&path=/login/&mode=auto&packetEncoding=xudp#%F0%9F%87%B7%F0%9F%87%BA[2]%F0%9F%8F%B3%EF%B8%8F%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%20%7C%20%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20(xhttp)


vless://9b6d037b-14e5-4469-b48f-eeb10cfcc6c0@wl-ru-1.midiopenners.ru:444?encryption=none&security=reality&sni=eh.vk.com&fp=chrome&pbk=YnG1LDJQElY4N4O2n0VIJfj2qPZkgOBjYPQd0TZIRC4&sid=a1b2c1d3&type=xhttp&host=eh.vk.com&path=/&mode=auto&packetEncoding=xudp#%F0%9F%87%A9%F0%9F%87%AA[1]%F0%9F%8F%B3%EF%B8%8F%20%D0%93%D0%B5%D1%80%D0%BC%D0%B0%D0%BD%D0%B8%D1%8F%20%7C%20%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20(xhttp)


vless://9b6d037b-14e5-4469-b48f-eeb10cfcc6c0@wl-ru-2.midiopenners.ru:445?encryption=none&security=reality&sni=eh.vk.com&fp=chrome&pbk=YnG1LDJQElY4N4O2n0VIJfj2qPZkgOBjYPQd0TZIRC4&sid=a1b2c1d3&type=xhttp&host=eh.vk.com&path=/&mode=auto&packetEncoding=xudp#%F0%9F%87%B5%F0%9F%87%B1[2]%F0%9F%8F%B3%EF%B8%8F%20%D0%9F%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%20%7C%20%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20(xhttp)


vless://9b6d037b-14e5-4469-b48f-eeb10cfcc6c0@wl-ru-2.midiopenners.ru:442?encryption=none&security=reality&sni=eh.vk.com&fp=chrome&pbk=YnG1LDJQElY4N4O2n0VIJfj2qPZkgOBjYPQd0TZIRC4&sid=a1b2c1d3&type=xhttp&host=eh.vk.com&path=/&mode=auto&packetEncoding=xudp#%F0%9F%87%B3%F0%9F%87%B1[2]%F0%9F%8F%B3%EF%B8%8F%20%D0%9D%D0%B8%D0%B4%D0%B5%D1%80%D0%BB%D0%B0%D0%BD%D0%B4%D1%8B%20%7C%20%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20(xhttp)


vless://4a6bfa9f-3f1e-0bb8-8117-0da4c8f1ae89@anti-vpn.ru:443?encryption=none&flow=xtls-rprx-vision&security=tls&sni=anti-vpn.ru&allowInsecure=true&alpn=h2,http/1.1&fp=qq&packetEncoding=xudp#%F0%9F%87%AB%F0%9F%87%AE%F0%9F%9F%A1%20%D0%9E%D0%B1%D1%85%D0%BE%D0%B4%20[%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9]%20%234


vless://cac15b03-8219-447a-86b5-86a32fcf7b77@51.250.44.134:2040?encryption=none&security=reality&sni=api-maps.yandex.ru&fp=chrome&pbk=wisCp1rkvJHzKo-C3SAVgUISLYXa_yuNRRPi81Ftomo&sid=56c1fd804eec153a&packetEncoding=xudp#%F0%9F%93%B6%20%D0%9E%D0%B1%D1%85%D0%BE%D0%B4%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20LTE%20(%F0%9F%99%85%20WiFi)%20-%20tcp


vless://60aaa42a-7337-4252-89e8-615e034d715c@84.201.131.34:8443?encryption=none&security=reality&sni=disk.yandex.ru&fp=random&pbk=-LJRJGUIqM9CU88DZUdSAPAEijyWPSOKNeDuymL2HnI&sid=6fcb0c&packetEncoding=xudp#%F0%9F%87%B3%F0%9F%87%B13%20LTE%20%7C%20%D0%92%D1%81%D0%B5%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B


vless://64268ba0-eed6-4795-be9a-301cad52bc4e@51.250.69.165:8443?encryption=none&security=reality&sni=disk.yandex.ru&fp=random&pbk=X033QdzTcO4OGHS9L_GP7sYg4ADcJYqm538W79I34CM&sid=0e2b73&packetEncoding=xudp#%F0%9F%87%B3%F0%9F%87%B11%20LTE%20%7C%20%D0%92%D1%81%D0%B5%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B
1🔥3🤡2
https://raw.githubusercontent.com/igareck/vpn-configs-for-russia/refs/heads/main/WHITE-CIDR-RU-checked.txt

сначала скопировать а потом как на картинках