gcc
вызванный с флагом -fomit-frame-pointer
генерирует код без этой последовательности и использует rbp как ещё один регистр общего назначения.Почему тогда все регистры не помещаются в стек?
--client-nat args
This pushable client option sets up a stateless one-to-one NAT rule on packet addresses (not ports), and is useful in cases where routes or ifconfig settings pushed to the client would
create an IP numbering conflict.
Examples:
client-nat snat 192.168.0.0/255.255.0.0
client-nat dnat 10.64.0.0/255.255.0.0
network/netmask (for example 192.168.0.0/255.255.0.0) defines the local view of a resource from the client perspective, while alias/netmask (for example 10.64.0.0/255.255.0.0) defines
the remote view from the server perspective.
Use snat (source NAT) for resources owned by the client and dnat (destination NAT) for remote resources.
Set --verb 6 for debugging info showing the transformation of src/dest addresses in packets.
sudo ipset -N BANNED_IP nethash
# Отбрасываем пакет если TTL 58 и IP есть в списке BANNED_IP
sudo iptables -A INPUT -m ttl --ttl-eq 58 -m set --match-set BANNED_IP src -j DROP
# Надо как-то добавлять IP отвечающие критериям в список BANNED_IP, для этого
# Добавляем кастомную цепочку RATE-LIMIT
sudo iptables -N RATE-LIMIT
# Если TTL 58 передаём пакет на обработку в цепочку RATE-LIMIT
sudo iptables -A INPUT -m ttl --ttl-eq 58 -j RATE-LIMIT
# Если количество пакетов не превышает 2 в секунду, то пропускаем
sudo iptables -A RATE-LIMIT -m limit --limit 2/second -j ACCEPT
# Когда лимит превышен добавляем в лог запись об этом событии
sudo iptables -A RATE-LIMIT -j LOG --log-prefix "LIMIT_EXCEEDED: "
# Затем добавляем IP в список BANNED_IP
sudo iptables -A RATE-LIMIT -m ttl --ttl-eq 58 -j SET --add-set BANNED_IP src
# Не обязательно, но отбрасываем пакет
sudo iptables -A RATE-LIMIT -j DROP
sudo ipset list BANNED_IP
sudo ipset del BANNED_IP <Забаненый IP>
sudo ping -i 0,1 -t 58 <IP сервера>
tail -F /var/log/syslog | grep LIMIT_EXCEEDED
dmesg | tail | grep LIMIT_EXCEEDED
www.youtube.com/get_video_info?video_id=XXXXXX
XXXXXX
подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU
после слеша.url_encoded_fmt_stream_map
. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url
– это ссылка на единый скачивабельный видеофайл.function getUrlParams(search) {
let hashes = search.slice(search.indexOf('?') + 1).split('&')
let params = {}
hashes.map(hash => {
let [key, val] = hash.split('=')
params[key] = decodeURIComponent(val)
})
return params
}
var s = '------'; // здесь длиннющая строка из ответа /get_video_info
var a = getUrlParams(s);
var b = getUrlParams(a.url_encoded_fmt_stream_map);
console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл
print(acts[0].__closure__)
print(acts[1].__closure__)
print(acts[0].__closure__[0].cell_contents)
def makeActions():
acts = []
for i in range(5):
def f(x, a=i):
return a ** x
acts.append(f)
return acts
acts.append(lambda x, a=i: a ** x)