Skip to content

Instantly share code, notes, and snippets.

@masakielastic
masakielastic / h2frames.js
Created September 18, 2024 19:15
h2frames.js
console.log(Buffer.from(h2frames()).toString('hex').toUpperCase());
function h2frames() {
const pri = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n";
const settings = [
'\x00\x00\x0C',
'\x04',
'\x00',
'\x00\x00\x00\x00',
<?php
function binToInt16(string $bytes): int
{
return (ord($bytes[0]) << 8) | ord($bytes[1]);
}
function binToInt24(string $bytes): int
{
return (ord($bytes[0]) << 16) |
<?php
class FrameHeader {
private $bytes;
public function __construct(string $bytes)
{
$this->bytes = $bytes;
}
@masakielastic
masakielastic / H2FrameIter.php
Last active July 21, 2024 22:39
HTTP/2 Frame Iterater
<?php
function H2FrameIter(string $chunk): Generator {
$chunk_size = strlen($chunk);
$index = 0;
$next = 0;
while (true) {
if ($next > $chunk_size || $next + 3 > $chunk_size) {
break;
@masakielastic
masakielastic / cgiserver.py
Last active July 13, 2024 18:43
CGIHTTPRequestHandler の使い方 (Python 3.13 で非推奨、Python 3.15 で削除)
from http.server import HTTPServer, CGIHTTPRequestHandler
import ssl
def run(host, port, ctx, handler):
server = HTTPServer((host, port), handler)
server.socket = ctx.wrap_socket(server.socket)
print('Server Starts - %s:%s' % (host, port))
try:
server.serve_forever()
@masakielastic
masakielastic / h2frames.py
Last active July 13, 2024 23:33
HTTP/2 frame example
def h2frames(name):
frames = {
'pri': b'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n',
'settings': b'\x00\x00\x0C' \
b'\x04' \
b'\x00' \
b'\x00\x00\x00\x00) \
b'\x00\x02\x00\x00\x00\x00' \
b'\x00\x03\x00\x00\x00\x64',
'ack': b'\x00\x00\x00' \
@masakielastic
masakielastic / h2frames.rb
Last active July 7, 2024 20:20
http/2 frames example
def h2frames(name)
frames = {
'pri' => "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n",
'settings' => "\x00\x00\x0C" +
"\x04" +
"\x00" +
"\x00\x00\x00\x00" +
"\x00\x02\x00\x00\x00\x00" +
"\x00\x03\x00\x00\x00\x64",
'ack' => "\x00\x00\x00" +
@masakielastic
masakielastic / h2frames.php
Last active July 7, 2024 20:21
HTTP/2 frames test data
<?php
function dump($chunk, $name) {
var_dump(
$name,
[
'size' => strlen($chunk),
'hex' => bin2hex($chunk)
]
);
Output (Go 1.22.3)
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4
D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
@masakielastic
masakielastic / ffi_example.php
Last active May 3, 2024 23:11
PHP FFI example
<?php
$x = FFI::new('int');
$x->cdata = 5;
var_dump(
5 === $x->cdata
);