Passive OS Fingerprint смена ОС Дано Ubuntu 16.04 сервер, на сервере подняты прокси (3proxy). При подключении через прокси с MacOS, OS Fingerprint определяется как Linux 3.11 and never [fuzzy] (http://witch.valdikss.org.ru/)
На данный момент с помощью не сложных манипуляций с настройками ядра /etc/sysctl.conf, получается сменить на Android (Linux 2.2.x-3.x [generic] [fuzzy]) и Windows NT.
Нужно поменять OS Fingerprint, так что-бы http://witch.valdikss.org.ru/ определял соединение как MacOS.
сигнатуры можно взять отсюда
https://github.com/ValdikSS/p0f-mtu/blob/master/p0...
Вот скрипт на питоне, который должен решать проблему, но с ним что-то не так.
Готов на сейф сделку нужно срочно.
import logging
l=logging.getLogger("scapy.runtime")
l.setLevel(49)
import os,sys,nfqueue,re,socket
from scapy.all import *
conf.verbose = 0
conf.L3socket = L3RawSocket
#Win7 syn
chars = dict();
chars["ip_frag"] = 0L;
chars["ip_ttl"] = 128;
chars["tcp_window"] = 8192;
chars["tcp_options"] = [('MSS', 1460), ('NOP', None), ('WScale', 2), ('NOP', None), ('NOP', None), ('SAckOK', '')]
##########################
########################## MODIFING FIREWALL
##########################
#store orginal firewall
proc_str = "iptables-save"
proc = subprocess.Popen(proc_str, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
iptables_save = ''
for line in proc.stdout:
iptables_save += line
#create modified firewall to allow packet capture of out going packets only
# FYI, by altering the outgoing packets info, the response packets will
# not completely "pair up" to the the ones iptables tried to send out,
# ipso facto we have to break connection tracking to change our fingerprint
iptables_save_nfqueue = re.sub(r"OUTPUT(.*)-j ACCEPT", "OUTPUT\g<1>-j NFQUEUE --queue-num 0", iptables_save)
iptables_save_nfqueue = re.sub("-A\s+OUTPUT\s+-o\s+lo\s+-j NFQUEUE --queue-num 0", "-A OUTPUT -o lo -j ACCEPT", iptables_save_nfqueue)
proc_str = "tempfile"
proc = subprocess.Popen(proc_str, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
tempfile_name = ''
for line in proc.stdout:
tempfile_name += line
tempfile_name = tempfile_name[:-1]
outputFile = open(tempfile_name, "w")
outputFile.write(iptables_save_nfqueue)
outputFile.close()
os.system('iptables-restore '+tempfile_name)
os.remove(tempfile_name)
# END FIREWALL MOD
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
s.bind(("enp0s25", 0x0800))
def send_rawsock(pkt):
global s
s.send(str(pkt))
def process(i, payload):
global chars
data = payload.get_data()
pkt = IP(data)
proto = pkt.proto
#print data.encode("hex")
# Check if it is a ICMP packet
if proto is 0x01:
#print "ICMP PACKET"
payload.set_verdict(nfqueue.NF_ACCEPT)
pass
# Check if it is an TCP packet
elif proto is 0x06:
if int(pkt[TCP].flags) is 2: #SYN-only
#print "TCP SYN PACKET"
new_tcp_opts_len = len(chars["tcp_options"])
current_tcp_opts_len = len(pkt[TCP].options)
options_are_the_same = True
if pkt[IP].frag != chars["ip_frag"]:
options_are_the_same = False
if pkt[IP].ttl != chars["ip_ttl"]:
options_are_the_same = False
if pkt[TCP].window != chars["tcp_window"]:
options_are_the_same = False
if current_tcp_opts_len == new_tcp_opts_len:
for i in range(0,current_tcp_opts_len):
if pkt[TCP].options[i][0] != chars["tcp_options"][i][0]:
options_are_the_same = False
break
if pkt[TCP].options[i][1] != chars["tcp_options"][i][1]:
options_are_the_same = False
break
if options_are_the_same:
payload.set_verdict(nfqueue.NF_ACCEPT)
pass
else:
payload.set_verdict(nfqueue.NF_DROP)
newpkt = Ether()/IP()/TCP()
newpkt[IP].version = pkt[IP].version
newpkt[IP].ihl = pkt[IP].ihl
newpkt[IP].tos = pkt[IP].tos
#newpkt[IP].len = pkt[IP].len
newpkt[IP].id = pkt[IP].id
newpkt[IP].flags = pkt[IP].flags
newpkt[IP].frag = chars["ip_frag"]
newpkt[IP].ttl = chars["ip_ttl"]
newpkt[IP].proto = pkt[IP].proto
newpkt[IP].src = pkt[IP].src
newpkt[IP].dst = pkt[IP].dst
newpkt[IP].options = pkt[IP].options
newpkt[TCP].sport = pkt[TCP].sport
newpkt[TCP].dport = pkt[TCP].dport
newpkt[TCP].seq = pkt[TCP].seq
newpkt[TCP].ack = pkt[TCP].ack
#newpkt[TCP].dataofs = pkt[TCP].dataofs
newpkt[TCP].reserved = pkt[TCP].reserved
newpkt[TCP].flags = pkt[TCP].flags
newpkt[TCP].window = chars["tcp_window"]
newpkt[TCP].urgptr = pkt[TCP].urgptr
newpkt[TCP].options = chars["tcp_options"]
send_rawsock(newpkt)
pass
else:
#print "TCP NONSYN PACKET"
payload.set_verdict(nfqueue.NF_ACCEPT)
pass
# Check if it is an UDP packet
elif proto is 0x11:
#print "UDP PACKET"
payload.set_verdict(nfqueue.NF_ACCEPT)
pass
# packet is other
else:
#print "OTHER PACKET"
payload.set_verdict(nfqueue.NF_ACCEPT)
pass
def main(s):
global iptables_save
q = nfqueue.queue()
q.open()
q.set_callback(process)
q.fast_open(0, socket.AF_INET)
try:
q.try_run()
except KeyboardInterrupt:
print "Exiting..."
q.unbind(socket.AF_INET)
q.close()
s.close()
#restore orginal firewall
proc_str = "tempfile"
proc = subprocess.Popen(proc_str, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
tempfile_name = ''
for line in proc.stdout:
tempfile_name += line
tempfile_name = tempfile_name[:-1]
outputFile = open(tempfile_name, "w")
outputFile.write(iptables_save)
outputFile.close()
os.system('iptables-restore '+tempfile_name)
os.remove(tempfile_name)
try:
main(s)
except:
print "Error: caught main(s) exception"
#restore orginal firewall
proc_str = "tempfile"
proc = subprocess.Popen(proc_str, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
tempfile_name = ''
for line in proc.stdout:
tempfile_name += line
tempfile_name = tempfile_name[:-1]
outputFile = open(tempfile_name, "w")
outputFile.write(iptables_save)
outputFile.close()
os.system('iptables-restore '+tempfile_name)
os.remove(tempfile_name)
Aktualne zlecenia dla freelancerów w kategorii C i C++
Porównawcza analiza efektywności oprogramowania dostosowanego (v2.2-field) i oprogramowania referencyjnego (Meshtastic v2.x)
82 PLN
Porównawcza analiza efektywności oprogramowania dostosowanego (v2.2-field) i oprogramowania referencyjnego (Meshtastic v2.x) na identycznej platformie sprzętowej (ESP32 + SX1268, 2W) według kryteriów zasięgu, przepustowości, stabilności łącza i zużycia energii. Przeprowadzić… C i C++, C# ∙ 2 dni 18 godzin temu ∙ 2 oferty |
Konsultacja i audyt bieżącego projektu na Odoo 19 Community EditionSzukamy programisty Odoo — samodzielnego dewelopera z doświadczeniem w pracy z Odoo 19 Community Edition, w tym z wykorzystaniem Claude Code. Potrzebujemy specjalisty, który ma zrealizowane projekty w Odoo oraz praktyczne doświadczenie w programowaniu z użyciem Claude Code.… C i C++, Javascript & Typescript ∙ 5 dni 19 godzin temu ∙ 7 ofert |
Rozwój oprogramowania dla Arduino (moduły RF 3–7,5 GHz, automatyczne skanowanie częstotliwości)Należy opracować system na Arduino do automatycznego wyszukiwania aktywnego analogowego sygnału wideo oraz automatycznego dostosowywania nadajnika do wykrytej częstotliwości.Planowane jest wykorzystanie trzech oddzielnych modułów odbiorczo-nadajnych: 3000–4200 MHz; 4900–6000… C i C++, Systemy wbudowane i mikrokontrolery ∙ 6 dni 20 godzin temu ∙ 4 oferty |
Czarna Ukraina (projekt RP na bazie MTA)
4253 PLN
|
Inżynier infrastruktury proxy mieszkalnychBudujemy sieć proxy dla użytkowników od podstaw — w pełni własną, bez dostawców zewnętrznych. Potrzebujemy jednego wyjątkowego inżyniera sieci, który zbuduje całą podstawę techniczną. Co zbudujesz: - SDK w tle dla Androida, które kieruje ruch proxy przez urządzenia użytkowników… C i C++, DevOps ∙ 12 dni 16 godzin temu ∙ 15 ofert |