ByeDPI: обсуждение

глянул что там на главной - ТАКОЕ я бы и сам забанил=))

чтобы попасть на такие сайты хватает этого -i 127.0.0.1 --disorder 1 --fake -1 --tls-sni=www.google.com

смотрел там сериал - лихие, вполне не плохой

Большое спасибо, что откликнулись!
Но, к сожалению, пробить эти сайты через Bye так и не смог.
Ладно, видимо не судьба.

Not working.
freebsd-test.go:

package main

import (
	"flag"
	"fmt"
	"net"
	"runtime"
	"syscall"
	"time"
	"unsafe"
)

const SF_SYNC = 0x00000004
const SF_NOCACHE = 0x00000010

func FreeBSDSendfile(outfd int, infd int, offset *int64, count int, flags int) (written int, err error) {
	var writtenOut uint64 = 0
	_, _, e1 := syscall.Syscall9(syscall.SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), uintptr(flags), 0, 0)

	written = int(writtenOut)

	if e1 != 0 {
		err = e1
	}
	return
}
func Msync(mem []byte, flags int) error {
	_, _, errno := syscall.RawSyscall6(
		syscall.SYS_MSYNC,
		uintptr(unsafe.Pointer(&mem[0])),
		uintptr(len(mem)),
		uintptr(flags),
		0, 0, 0)
	if errno != 0 {
		return errno
	}
	return nil
}
func p(e error) {
	if e != nil {
		panic(e)
	}
}
func main() {
	var (
		dstStr      string
		ttl         int
		tmpFilePath string
	)
	flag.StringVar(&dstStr, "dst", "9.9.9.10:443", "")
	flag.IntVar(&ttl, "ttl", 10, "")
	flag.StringVar(&tmpFilePath, "path", "/tmp/sendfile-test1.txt", "")
	flag.Parse()

	dst, err := net.ResolveTCPAddr("tcp", dstStr)
	p(err)
	isIPv6 := dst.IP.To4() == nil
	conn, err := net.DialTCP("tcp", nil, dst)
	p(err)
	defer conn.Close()
	raw, _ := conn.SyscallConn()
	var sockFD int
	raw.Control(func(t uintptr) {
		sockFD = int(t)
	})
	if isIPv6 {
		syscall.SetsockoptInt(sockFD, syscall.IPPROTO_IPV6, syscall.IPV6_UNICAST_HOPS, ttl)
	} else {
		syscall.SetsockoptInt(sockFD, syscall.IPPROTO_IP, syscall.IP_TTL, ttl)
	}

	fileFD, err := syscall.Open(tmpFilePath, syscall.O_CREAT|syscall.O_RDWR|syscall.O_SYNC, 0o600)
	p(err)
	defer func() {
		syscall.Close(fileFD)
		syscall.Unlink(tmpFilePath)
	}()
	err = syscall.Ftruncate(fileFD, 4)
	p(err)
	firstSegment, err := syscall.Mmap(fileFD, 0, 4, syscall.PROT_WRITE, syscall.MAP_SHARED)
	p(err)
	defer syscall.Munmap(firstSegment)
	copy(firstSegment, []byte("haha"))

	var n int64
	fmt.Printf("GOOS: %s\n", runtime.GOOS)
	if runtime.GOOS == "freebsd" {
		_, err = FreeBSDSendfile(sockFD, fileFD, &n, 4, SF_NOCACHE)
	} else {
		_, err = syscall.Sendfile(sockFD, fileFD, &n, 4)
	}
	p(err)

	copy(firstSegment, []byte("1234"))
	err = Msync(firstSegment, syscall.MS_SYNC)
	p(err)
	time.Sleep(100 * time.Microsecond)

	if isIPv6 {
		syscall.SetsockoptInt(sockFD, syscall.IPPROTO_IPV6, syscall.IPV6_UNICAST_HOPS, 64)
	} else {
		syscall.SetsockoptInt(sockFD, syscall.IPPROTO_IP, syscall.IP_TTL, 64)
	}
	_, err = conn.Write([]byte("567\n"))

	time.Sleep(4 * time.Second)
}

fix-syscall9.patch:

--- a/freebsd-test.go
+++ b/freebsd-test.go
@@ -13,7 +13,7 @@
 const SF_SYNC = 0x00000004
 const SF_NOCACHE = 0x00000010
 
-func FreeBSDSendfile(outfd int, infd int, offset *int64, count int, flags int) (written int, err error) {
+/*func FreeBSDSendfile(outfd int, infd int, offset *int64, count int, flags int) (written int, err error) {
 	var writtenOut uint64 = 0
 	_, _, e1 := syscall.Syscall9(syscall.SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), uintptr(flags), 0, 0)
 
@@ -23,7 +23,7 @@
 		err = e1
 	}
 	return
-}
+}*/
 func Msync(mem []byte, flags int) error {
 	_, _, errno := syscall.RawSyscall6(
 		syscall.SYS_MSYNC,
@@ -85,7 +85,7 @@
 	var n int64
 	fmt.Printf("GOOS: %s\n", runtime.GOOS)
 	if runtime.GOOS == "freebsd" {
-		_, err = FreeBSDSendfile(sockFD, fileFD, &n, 4, SF_NOCACHE)
+		//_, err = FreeBSDSendfile(sockFD, fileFD, &n, 4, SF_NOCACHE)
 	} else {
 		_, err = syscall.Sendfile(sockFD, fileFD, &n, 4)
 	}

GOOS=freebsd go build freebsd-test.go
patch -p 1 < fix-syscall9.patch
GOOS=linux go build -o linux-test freebsd-test.go

I only tested sendfile() on FreeBSD-14.2-RELEASE-amd64-bootonly.iso .

I wrote similar code, but it works for me on FreeBSD 14.1 (however, i’m testing in virtualbox). Can you check this?

I have tested fbsd_sf branch, still not working for me. My Configuration:
GUI frontend: virt-manager
hypervisor: KVM
emulator: QEMU-system
network: default
virsh net-dumpxml default :

<network connections='1'>
  <name>default</name>
  <uuid>5f1aaee0-c200-5a54-9b03-40d2a96c69a5</uuid>
  <forward mode='nat'>
    <nat ipv6='yes'>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='66:3c:4a:64:ef:d8'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
  <ip family='ipv6' address='fdf3:a26d:a7d0:3f82::1' prefix='64'>
  </ip>
</network>

Кто-нибудь может подсказать конфиг для yt music? Текущий конфиг, на котором youtube работает в yt music не может самое главное - воспроизводить музыку, интерфейс и прочий функционал грузится.
Флаги командой строки:

s1 -q1 -Y -Ar -s5 -o1+s -At -f-1 -r1+s -As -s1 -o1 +s -s-1 -An

разные провайдеры, разные настройки тспу, у других будет работать конфиг который у вас не будет и наоборот, подбирайте сами прочитав расшифровку ключей