Giter Club home page Giter Club logo

nfqttl's Introduction

Nfqttl

  • Nfqttl - module for modifying the ttl value in the packet header.
  • Sets the ttl value of 64 for the packet on the mobile data interface and sets the ttl value of 65 for the packet on the local interface (wifi, bluetooth).
  • Splitting the tcp packet into sequences.
  • For incoming packets, if ttl = 1, set to ttl 64.
  • IPv6 packets are dropped.

How to use

  • Download and install from storage in Magisk App the installing archive: nfqttl2.1.2.zip.
  • Reboot.
  • When device boots, Magisk will start the module.

How it work

  • The networking subsystem of the Linux kernel has a mechanism to pass network packets to the user application for processing (NetFilter Queue). Nfqttl receives packets, edits the ttl packet header fields and the checksum, and sends them back to the kernel.

Compatibility

  • Magisk 20.4+
  • Nfqueue

Links

Changelog

v2.5

  • Add tcp sequence split.

v2.6

  • The volume of the buffer is expanded.

v2.7

  • Fixes.

v2.8

  • Update code.

Donate

  • https://www.buymeacoffee.com/cyborgone
  • Bitcoin: bc1qxmsn9qeptpa90sxejz8em4w5rvcggnmrvq34uh
  • Litecoin: ltc1qszqj7dfgqjn3pw7g7uw4yu7fc8ded9u3clyt9f
  • Toncoin: EQA9Ac781nf9_-BEF8yLfc4wwtrkqamB2jWkF8TpBodSyBKe

License

GNU GPLv3.

nfqttl's People

Contributors

cyborg-one avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

nfqttl's Issues

Local area wifi connection not working

Device: Pixel 3a on AICP custom ROM, Android 11.

Issue: connecting pixel 3a to home router not working; wifi says no internet while connected to home wifi, internet pages will not load on pixel 3a.

Не открываются Госуслуги

При включённом модуле версии 2.7:
gosuslugi.ru - "соединение было сброшено" (мобильный интернет и WiFi)
esia.gosuslugi.ru - открывается
Приложение - "сервер временно недоступен"
При отключении модуля работоспособность восстанавливается.

Smule

Привет! Подскажите, пожалуйста, почему при использовании модуля не восроизводятся песни в приложении sing by smule? Что с этим можно сделать?

Source code?

README says it's under GPLv3, but link to source code is this very repo which doesn't contain the source code, so where is the source code?

USB Tethering / rndis?

Thanks for creating this module! I've got it working with wifi-tethering on my OnePlus 8 Pro. However, my carrier throttles the connection if I tether over USB. Was this module meant to work for usb tethering? And if not, could you add that functionality? If it was meant to do so, there may be an issue with that portion.

Thanks again for your time and dedication!

Не работает(

Добрый день
ZTE BLADE A910
Resurrection Remix 7.1.2
magisk 21.4
не работает, не фиксирует TTL
но если вручную делаю в терминале без Вашего модуля
su
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64

то все работает
помогите разобраться в чем причина

Donate

I'm sorry but this is the only way I could find to contact you. I have been looking for a solution for so long. Your module works perfect. I'd like to know how to donate to you. I could not find any links.

does not work

Please, help. Xiaomi 11 ultra , a12 Xiaomi eu 22.6.9 . Does not fix TTL or the Internet does not work at all.

Модуль режет скорость (мтс)

Это не шейп мтс

Суть проблемы в том, что включённый модуль в магиске режет скорость до 30 мбит/сек, в лучшем случае это 50.
Скорость без модуля:
Screenshot_2022-12-13-20-16-09-992_org zwanoo android speedtest

Со включённым модулем:
Screenshot_2022-12-13-20-18-10-000_org zwanoo android speedtest

Телефон Poco F3
Тариф от МТС с безлимитным интернетом, на раздачу трафик ограничен.
Раздача на скорость никак не влияет, что на компьютере 4мбсек, что на телефоне.

2.1.2 some websites won't load

I'm in version 2.1.2, some websites won't load, and some games can't connect. For instance the Quest Store in the quest 2 headset just loads forever. It does eventually load but some games can't connect at all. Aside from that this module effectively bypasses hotspot throttling

TTL of 65 on phone usage

I ran a packet sniffer from my router. Without your module installed my phone data usage, not hotspot, has a ttl of 64. With your module installed my phone usage has a TTL of 65. With your module installed all hotspot usage has a TTL of 64.

So it seems your module is setting a TTL of 65 for even my phone usage.

These readings were taken from my router. One packet you will see my phone usage, and the other hotspot usage. My phone usage is definitely showing 65.

hotspot64
hotspot65

It does not work...

I am connected to the phone using USB tethering.

Ping from phone to google:
64 bytes from 172.217.21.14: icmp_seq=1 ttl=106 time=94.7 ms
Ping from pc to same address:
64 bytes from 172.217.21.14: icmp_seq=1 ttl=105 time=87.0 ms
output of iptables-save:

# Generated by iptables-save v1.8.4 on Thu Sep 29 19:41:25 2022
*security
:INPUT ACCEPT [5684:1493109]
:FORWARD ACCEPT [12589:8945513]
:OUTPUT ACCEPT [6007:1139629]
COMMIT
# Completed on Thu Sep 29 19:41:25 2022
# Generated by iptables-save v1.8.4 on Thu Sep 29 19:41:25 2022
*raw
:PREROUTING ACCEPT [14092:10551427]
:OUTPUT ACCEPT [5475:1097508]
:bw_raw_PREROUTING - [0:0]
:clat_raw_PREROUTING - [0:0]
:idletimer_raw_PREROUTING - [0:0]
:nm_mdmprxy_raw_pre - [0:0]
:qcom_htimer_PREROUTING - [0:0]
:tetherctrl_raw_PREROUTING - [0:0]
-A PREROUTING -j qcom_htimer_PREROUTING
-A PREROUTING -j clat_raw_PREROUTING
-A PREROUTING -j bw_raw_PREROUTING
-A PREROUTING -j idletimer_raw_PREROUTING
-A PREROUTING -j tetherctrl_raw_PREROUTING
-A bw_raw_PREROUTING -i ipsec+ -j RETURN
-A bw_raw_PREROUTING -m policy --dir in --pol ipsec -j RETURN
-A bw_raw_PREROUTING -m bpf --object-pinned /sys/fs/bpf/prog_netd_skfilter_ingress_xtbpf
-A idletimer_raw_PREROUTING -i rmnet_data1 -j IDLETIMER --timeout 10 --label 0 --send_nl_msg 1
-A nm_mdmprxy_raw_pre -p tcp -m multiport --ports 5060 -j NOTRACK
-A nm_mdmprxy_raw_pre -p udp -m multiport --ports 5060 -j NOTRACK
-A tetherctrl_raw_PREROUTING -i rndis0 -p tcp -m tcp --dport 21 -j CT --helper ftp
-A tetherctrl_raw_PREROUTING -i rndis0 -p tcp -m tcp --dport 1723 -j CT --helper pptp
-A tetherctrl_raw_PREROUTING -i wlan1 -p tcp -m tcp --dport 21 -j CT --helper ftp
-A tetherctrl_raw_PREROUTING -i wlan1 -p tcp -m tcp --dport 1723 -j CT --helper pptp
COMMIT
# Completed on Thu Sep 29 19:41:25 2022
# Generated by iptables-save v1.8.4 on Thu Sep 29 19:41:25 2022
*nat
:PREROUTING ACCEPT [4671:645532]
:INPUT ACCEPT [699:48478]
:OUTPUT ACCEPT [1331:92813]
:POSTROUTING ACCEPT [355:24668]
:nm_mdmprxy_masquerade_skip - [0:0]
:oem_nat_pre - [0:0]
:tetherctrl_nat_POSTROUTING - [0:0]
-A PREROUTING -j oem_nat_pre
-A POSTROUTING -j tetherctrl_nat_POSTROUTING
-A tetherctrl_nat_POSTROUTING -o rmnet_data1 -j MASQUERADE
COMMIT
# Completed on Thu Sep 29 19:41:25 2022
# Generated by iptables-save v1.8.4 on Thu Sep 29 19:41:25 2022
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [5239:1341244]
:FORWARD ACCEPT [12562:8943624]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [18156:10040806]
:bw_mangle_POSTROUTING - [0:0]
:idletimer_mangle_POSTROUTING - [0:0]
:nfqttli - [0:0]
:nfqttlo - [0:0]
:nm_mdmprxy_icmp_pkt_marker - [0:0]
:nm_mdmprxy_mark_prov_chain - [0:0]
:nm_mdmprxy_mngl_post - [0:0]
:nm_mdmprxy_mngl_pre - [0:0]
:nm_mdmprxy_mngl_pre_ex - [0:0]
:nm_mdmprxy_mngl_pre_spi - [0:0]
:nm_mdmprxy_mngl_pre_tee - [0:0]
:nm_mdmprxy_pkt_forwarder - [0:0]
:nm_mdmprxy_pkt_marker - [0:0]
:nm_mdmprxy_pkt_skmark - [0:0]
:oem_mangle_post - [0:0]
:qcom_htimer_POSTROUTING - [0:0]
:qcom_qos_filter_POSTROUTING - [0:0]
:qcom_qos_reset_POSTROUTING - [0:0]
:routectrl_mangle_INPUT - [0:0]
:tc_idletimer - [0:0]
:tc_wmm - [0:0]
:tetherctrl_mangle_FORWARD - [0:0]
:wakeupctrl_mangle_INPUT - [0:0]
-A PREROUTING -j nfqttli
-A INPUT -j wakeupctrl_mangle_INPUT
-A INPUT -j routectrl_mangle_INPUT
-A FORWARD -j tetherctrl_mangle_FORWARD
-A OUTPUT -j nfqttlo
-A POSTROUTING -j qcom_htimer_POSTROUTING
-A POSTROUTING -j oem_mangle_post
-A POSTROUTING -j bw_mangle_POSTROUTING
-A POSTROUTING -j idletimer_mangle_POSTROUTING
-A POSTROUTING -j qcom_qos_reset_POSTROUTING
-A POSTROUTING -j qcom_qos_filter_POSTROUTING
-A bw_mangle_POSTROUTING -o ipsec+ -j RETURN
-A bw_mangle_POSTROUTING -m policy --dir out --pol ipsec -j RETURN
-A bw_mangle_POSTROUTING -j MARK --set-xmark 0x0/0x100000
-A bw_mangle_POSTROUTING -m owner --uid-owner 1029 -j RETURN
-A bw_mangle_POSTROUTING -m bpf --object-pinned /sys/fs/bpf/prog_netd_skfilter_egress_xtbpf
-A idletimer_mangle_POSTROUTING -o rmnet_data1 -j IDLETIMER --timeout 10 --label 0 --send_nl_msg 1
-A nfqttli -j NFQUEUE --queue-num 6464
-A nfqttlo -j NFQUEUE --queue-num 6464
-A nm_mdmprxy_mark_prov_chain -p udp -m socket --transparent --nowildcard --restore-skmark -j nm_mdmprxy_pkt_skmark
-A nm_mdmprxy_mark_prov_chain -p tcp -m socket --transparent --nowildcard --restore-skmark -j nm_mdmprxy_pkt_skmark
-A nm_mdmprxy_mngl_post -m mark --mark 0xf0002 -j MARK --set-xmark 0x0/0xffffffff
-A nm_mdmprxy_pkt_marker -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A nm_mdmprxy_pkt_marker -j nm_mdmprxy_mngl_pre
-A nm_mdmprxy_pkt_marker -j nm_mdmprxy_mark_prov_chain
-A nm_mdmprxy_pkt_marker -j nm_mdmprxy_mngl_pre_spi
-A nm_mdmprxy_pkt_marker -j nm_mdmprxy_mngl_pre_ex
-A nm_mdmprxy_pkt_marker -p udp -m udp --dport 7275 -j MARK --set-xmark 0xf0002/0xffffffff
-A nm_mdmprxy_pkt_marker -p tcp -m tcp --dport 5060 -j MARK --set-xmark 0xf0002/0xffffffff
-A nm_mdmprxy_pkt_marker -p udp -m udp --dport 5060 -j MARK --set-xmark 0xf0002/0xffffffff
-A nm_mdmprxy_pkt_marker -m mark --mark 0xf0002 -j nm_mdmprxy_pkt_forwarder
-A nm_mdmprxy_pkt_marker ! -p icmp -m mark --mark 0xf0002 -j DROP
-A nm_mdmprxy_pkt_skmark -j RETURN
-A qcom_qos_reset_POSTROUTING -o rmnet_data+ -j MARK --set-xmark 0x0/0xffffffff
-A routectrl_mangle_INPUT -i rmnet_data0 -j MARK --set-xmark 0xf0001/0xffefffff
-A routectrl_mangle_INPUT -i rmnet_data1 -j MARK --set-xmark 0x30064/0xffefffff
-A routectrl_mangle_INPUT -i rndis0 -j MARK --set-xmark 0x30063/0xffefffff
-A routectrl_mangle_INPUT -i wlan1 -j MARK --set-xmark 0x30063/0xffefffff
-A tetherctrl_mangle_FORWARD -p tcp -m tcp --tcp-flags SYN SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Thu Sep 29 19:41:25 2022
# Generated by iptables-save v1.8.4 on Thu Sep 29 19:41:25 2022
*filter
:INPUT ACCEPT [14:3814]
:FORWARD ACCEPT [72:4900]
:OUTPUT ACCEPT [27:7518]
:bw_FORWARD - [0:0]
:bw_INPUT - [0:0]
:bw_OUTPUT - [0:0]
:bw_costly_rmnet_data1 - [0:0]
:bw_costly_shared - [0:0]
:bw_data_saver - [0:0]
:bw_global_alert - [0:0]
:bw_happy_box - [0:0]
:bw_penalty_box - [0:0]
:fw_FORWARD - [0:0]
:fw_INPUT - [0:0]
:fw_OUTPUT - [0:0]
:nm_mdmprxy_doze_mode_skip - [0:0]
:nm_mdmprxy_iface_pkt_fwder - [0:0]
:nm_qti_filter_ssdp_dropper - [0:0]
:oem_fwd - [0:0]
:oem_out - [0:0]
:st_OUTPUT - [0:0]
:st_clear_caught - [0:0]
:st_clear_detect - [0:0]
:st_penalty_log - [0:0]
:st_penalty_reject - [0:0]
:tc_limiter - [0:0]
:tc_mobile_limiter - [0:0]
:tetherctrl_FORWARD - [0:0]
:tetherctrl_counters - [0:0]
-A INPUT -j bw_INPUT
-A INPUT -j fw_INPUT
-A FORWARD -j oem_fwd
-A FORWARD -j fw_FORWARD
-A FORWARD -j bw_FORWARD
-A FORWARD -j tetherctrl_FORWARD
-A OUTPUT -j nm_qti_filter_ssdp_dropper
-A OUTPUT -j oem_out
-A OUTPUT -j fw_OUTPUT
-A OUTPUT -j st_OUTPUT
-A OUTPUT -j bw_OUTPUT
-A bw_FORWARD -i rmnet_data1 -j bw_costly_rmnet_data1
-A bw_FORWARD -o rmnet_data1 -j bw_costly_rmnet_data1
-A bw_INPUT -j bw_global_alert
-A bw_INPUT -i rmnet_data1 -j bw_costly_rmnet_data1
-A bw_INPUT -p esp -j RETURN
-A bw_INPUT -m mark --mark 0x100000/0x100000 -j RETURN
-A bw_INPUT -j MARK --set-xmark 0x100000/0x100000
-A bw_OUTPUT -j bw_global_alert
-A bw_OUTPUT -o rmnet_data1 -j bw_costly_rmnet_data1
-A bw_costly_rmnet_data1 -j bw_penalty_box
-A bw_costly_rmnet_data1 -m quota2 ! --name rmnet_data1  --quota 9223372036854775807  -j REJECT --reject-with icmp-port-unreachab
le
-A bw_costly_shared -j bw_penalty_box
-A bw_data_saver -j RETURN
-A bw_global_alert -m quota2 ! --name globalAlert  --quota 2097152
-A bw_happy_box -m bpf --object-pinned /sys/fs/bpf/prog_netd_skfilter_whitelist_xtbpf -j RETURN
-A bw_happy_box -j bw_data_saver
-A bw_penalty_box -m bpf --object-pinned /sys/fs/bpf/prog_netd_skfilter_blacklist_xtbpf -j REJECT --reject-with icmp-port-unreach
able
-A bw_penalty_box -j bw_happy_box
-A nm_qti_filter_ssdp_dropper -o r_rmnet_data+ -p udp -m udp --dport 1900 -j DROP
-A nm_qti_filter_ssdp_dropper -o rmnet_data+ -p udp -m udp --dport 1900 -j DROP
-A st_clear_detect -m connmark --mark 0x2000000/0x2000000 -j REJECT --reject-with icmp-port-unreachable
-A st_clear_detect -m connmark --mark 0x1000000/0x1000000 -j RETURN
-A st_clear_detect -p tcp -m u32 --u32 "0x0>>0x16&0x3c@0xc>>0x1a&0x3c@0x0&0xffff0000=0x16030000&&0x0>>0x16&0x3c@0xc>>0x1a&0x3c@0x
4&0xff0000=0x10000" -j CONNMARK --set-xmark 0x1000000/0x1000000
-A st_clear_detect -p udp -m u32 --u32 "0x0>>0x16&0x3c@0x8&0xffff0000=0x16fe0000&&0x0>>0x16&0x3c@0x14&0xff0000=0x10000" -j CONNMA
RK --set-xmark 0x1000000/0x1000000
-A st_clear_detect -m connmark --mark 0x1000000/0x1000000 -j RETURN
-A st_clear_detect -p tcp -m state --state ESTABLISHED -m u32 --u32 "0x0>>0x16&0x3c@0xc>>0x1a&0x3c@0x0&0x0=0x0" -j st_clear_caugh
t
-A st_clear_detect -p udp -j st_clear_caught
-A st_penalty_log -j CONNMARK --set-xmark 0x1000000/0x1000000
-A st_penalty_log -j NFLOG
-A st_penalty_reject -j CONNMARK --set-xmark 0x2000000/0x2000000
-A st_penalty_reject -j NFLOG
-A st_penalty_reject -j REJECT --reject-with icmp-port-unreachable
-A tetherctrl_FORWARD -j bw_global_alert
-A tetherctrl_FORWARD -i rmnet_data1 -o rndis0 -m state --state RELATED,ESTABLISHED -g tetherctrl_counters
-A tetherctrl_FORWARD -i rndis0 -o rmnet_data1 -m state --state INVALID -j DROP
-A tetherctrl_FORWARD -i rndis0 -o rmnet_data1 -g tetherctrl_counters
-A tetherctrl_FORWARD -i rmnet_data1 -o wlan1 -m state --state RELATED,ESTABLISHED -g tetherctrl_counters
-A tetherctrl_FORWARD -i wlan1 -o rmnet_data1 -m state --state INVALID -j DROP
-A tetherctrl_FORWARD -i wlan1 -o rmnet_data1 -g tetherctrl_counters
-A tetherctrl_FORWARD -j DROP
-A tetherctrl_counters -i rndis0 -o rmnet_data1 -j RETURN
-A tetherctrl_counters -i rmnet_data1 -o rndis0 -j RETURN
-A tetherctrl_counters -i wlan1 -o rmnet_data1 -j RETURN
-A tetherctrl_counters -i rmnet_data1 -o wlan1 -j RETURN
COMMIT
# Completed on Thu Sep 29 19:41:25 2022
sweet:/ #

Telegram

Привет дружище! Подскажи, есть ли у тебя телеграм-канал или чатик, чтобы можно было следить за обновлениями твоего модуля? Он очень хорош. Я для xiaomi ми9 сделал модуль ядра для поддержки ттл, и твой модуль по красоте прям заходит.

Отвал интернета

Приветствую. Происходит отвал интернета на версии 2.7. Предположительно при переключении wi-fi и режима полета, помогает только перезагрузка.
При сети пропадает значок типа сети и интернета нет. При wi-fi значок wi-fi есть, но предупреждение - сеть без интернета.
На версии 2.1 данной проблемы нет.
Пробовал ядро без TTL и с TTL.
Upd. Проверил версию 2.5 - вроде проблем таких нет. На 2.7 режим полета однозначно роняет интернет.
Upd2. Возможно версии 2.5 и 2.7 не работают - не фиксируют весь или часть трафика.

Скорость падает до 1 мбит

Сижу на Poco f2 pro, Android 12, ошибок при установке/работе модуля 2.8 нет, но мтс режет скорость до 1 мбит/с. Похоже, научились определять раздачу не только по ттл.
Получается, тут уже фиксить никак?
Могу какие-либо логи кинуть, вопрос - какие нужны.

Ещё заметил, что иногда YouTube и многие другие сайты сразу перестают грузиться, но при этом скорость становится нормальной(чаще наоборот), посмотрел в других открытых и закрытых проблемах ваши ответы (cyborg-one) по поводу перезапуска/корректировки модуля, проделал все что нашел - пока ничего не изменилось.

Version 2.8 cannot hide modem mode.

I use this module in Lenovo J607F (wi-fi) and Poco F3, both on Android 12L (api 32). Version 2.7 works perfect, but with 2.8 my operator broke the connection after 2-3 minutes. Can give any logs that may help.

speed drop

I use home Internet with a stable speed of 93-95 Mbit/s When you turn on the module and Adguard I observe a drop in speed by 3-4 times, while the drop is unstable with sharp dips. There is a similar situation on the MTS mobile Internet, but due to the unstable speed it is very difficult to detect and can be attributed to poor network speed. My smartphone does not support direct TTL fixation in the kernel I tried to enter commands in the terminal "iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64", but it shows a message about an unknown command. I concluded that the smartphone does not support iptables

If possible, contact me on Telegram, Github is not at all convenient
@qwe1cer

Не грузит forkplayer smart tv

Раздаю с версии патча 2.7 - ничего не грузит в браузере "forkplayer". В сток ютубе и других приложениях smart tv - грузит нормально. Казалось бы - разбирайтесь с этим самым браузером, раз он не работает, но на старом тел, где для фикса ttl использовал другие патчи (с поддержкой в ядре) - всё работало и работает по сей день.
Решил убедиться, что дело в патче и вставляю сим билайн (где раздача от оператора разрешена, но необходимо покупать услугу) в прошитый модем 3G (взял для теста) и раздаю интернет с пк - всё грузится (предварительно зафиксировав ttl на windows в значение 65)
Решил затестить версию 2.8 - не раздаёт вообще что-то (нет соединения к интернету) и по параметрам запуска
nfqttl --nf_accept -s -u - выдаёт "test 1, test 2" и ещё всякий мусор.
Мог бы проверить на других версиях, но они недоступны)
nfqttl --nf_accept -s -u пишет:

выхлоп

photo_2021-04-18_23-58-01

снять лог через matlog не получается - моё устройство его не "жуёт"

adb log:
logcat.log
p.s:смотреть с 37 минуты

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.