Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Да, надо фильтры посмотреть. Всё-таки весь трафик через awk гонять как-то не комильфо. Убрать его полностью не получится - мне же надо из этой строки айпишники выдрать, а ash на этой железке настолько убог, что сам регулярки не умеет (bash не влезет, там на флехе где-то 60кб свободного места осталось). А на сишке анализатор пакетов влом писать, раз всё и так работает.
А сама идея вот такая - скрипт на роутере видит ARP запрос в духе "who-has 192.168.1.1 tell 192.168.1.7" и добавляет себе айпишку 192.168.1.1 и маршрут на 192.168.1.7. После чего всё без проблем роутится и натится. И на подключенном компе не надо ничего перенастраивать... Заодно все DNS запросы DNAT'ом заруливаются на конкретный айпишник. Ну и DHCP демон крутится до кучи, чтобы покрыть оставшиеся случаи. В итоге - "воткнул и работай", очень удобная железка получилась.
> killall'ы - от души
Ну. Влом было думать, почему tcpdump и awk каскадом не убиваются... Кстати, последний killall сначала стоял первым, и скрипт убивал себя не дойдя до оставшихся killall'ов.
P.S. В общем-то проект just for fun и на коленке, но народ железкой доволен - не надо выписывать айпишки, сбрасывать на автоопределение, потом вписывать айпишки обратно... Просто втыкаешь кабель и юзаешь инет.
> Это ты нам наверное файерволов наворотил?
Не, там иногда компы приносят со статическими айпишками. По DHCP они само собой нифига не получат, а менять настройки вломы, да и старые айпишки потом вернуть забывают. Из-за этого и приходится мониторить ARP'ы и прикидываться прописанным в настройках того компа шлюзом.
> Не тормозит?
Да там же не торренты качают... Так что не тормозит. Но фильтр надо бы утащить в параметры самого tcpdump'а. tcpdump (аля libpcap) вроде бы прямо на ядерном уровне должен фильтровать, не отдавая лишние пакеты в юзермод...
А в идеале написать бы сишную прогу с libpcap, но лень же.
>Суть задачи в том, чтобы раздать инет компу с произвольными и неизвестными (но вменяемыми) настройками сети.
> Если у него статика - прикинуться тем, кто прописан у него в качестве шлюза.
До чего техника дошла, а. Идея - пиздатая.
Или это не техника дошла, а борманд уже совсем дошёл.
Подробнее: прокси арп не правит таблицу маршрутизации. Поэтому он вполне канает, если админ заранее знает, какие подсети в какую сторону. Но в моём случае о подключаемом компе ничего не известно (ну кроме того, что он как-то работал в своей локалке, либо настройки никто не лапал и там дефолтное дхцп) и заранее настроить маршруты я не могу.
Ради интереса попробовал поиграться с proxy arp. Отвечает только на ARP'ы с тех айпишек, для которых есть маршрут на интерфейс, с которого прилетел запрос. Т.е. все маршруты нужно прописать заранее. Неюзабельно для моего случая ;(
> кстати, как лучше?
«libpcap». «Сырые сокеты» («Raw Sockets») тоже можно использовать, но тогда тебе придётся в юзермоде обрабатывать все пакеты с соответствующего интерфейса, а это сильно нагружает процессор (если, конечно, у тебя на машине хоть какой-то трафик есть).
Дык она и в виде говноскрипта практическую задачу решала. Переписывать на сишку было бы преждевременной оптимизацией. Да и времени на это ушло бы на порядки больше.
Ведро умеет раздавать инет через usb. Определяется как стандартная usb сетевуха, dhcp и dns выдаёт, трафик роутит на вайфай или опсоса.
З.Ы. А на настройки компа в данном случае пофиг т.к. это новая сетевуха из-за чего все оси юзают на ней dhcp. Не заработает разве что если ты анально всё зафаерволил и запретил.
даже я до `tcpdump | while read ` еще не опускался...
ЗЫ к слову, tcpdump по старой памяти позволяет фильтры задавать. может awk полностью не заменит, но а вдруг.
А сама идея вот такая - скрипт на роутере видит ARP запрос в духе "who-has 192.168.1.1 tell 192.168.1.7" и добавляет себе айпишку 192.168.1.1 и маршрут на 192.168.1.7. После чего всё без проблем роутится и натится. И на подключенном компе не надо ничего перенастраивать... Заодно все DNS запросы DNAT'ом заруливаются на конкретный айпишник. Ну и DHCP демон крутится до кучи, чтобы покрыть оставшиеся случаи. В итоге - "воткнул и работай", очень удобная железка получилась.
если с BusyBox связался - учи awk.
на первый взгляд, все что ты делаешь одним awk скриптом реализуемо.
я собираюсь подобным то же пострадать: VPN гейтвей на каком banana pi или одроиде + socks5 прокся + килл свитч.
Ну. Влом было думать, почему tcpdump и awk каскадом не убиваются... Кстати, последний killall сначала стоял первым, и скрипт убивал себя не дойдя до оставшихся killall'ов.
P.S. В общем-то проект just for fun и на коленке, но народ железкой доволен - не надо выписывать айпишки, сбрасывать на автоопределение, потом вписывать айпишки обратно... Просто втыкаешь кабель и юзаешь инет.
LOL.
попробуй: в /tmp/ делаешь симлинк на себя, но под другим именем. запускашь монитор через другое имя, вместо $0.
> Просто втыкаешь кабель и юзаешь инет.
В общем случае оно так и работает по дефолту. Это ты нам наверное файерволов наворотил?
Не, там иногда компы приносят со статическими айпишками. По DHCP они само собой нифига не получат, а менять настройки вломы, да и старые айпишки потом вернуть забывают. Из-за этого и приходится мониторить ARP'ы и прикидываться прописанным в настройках того компа шлюзом.
Если у него DHCP - выдать айпишку. Если у него статика - прикинуться тем, кто прописан у него в качестве шлюза.
Хм. Мудро. Но tcpdump в рилтайме на весь траффик... Не тормозит?
Да там же не торренты качают... Так что не тормозит. Но фильтр надо бы утащить в параметры самого tcpdump'а. tcpdump (аля libpcap) вроде бы прямо на ядерном уровне должен фильтровать, не отдавая лишние пакеты в юзермод...
А в идеале написать бы сишную прогу с libpcap, но лень же.
в твоем случае нечто типа: `arp and ether src not $LAN_MAC`
> Если у него статика - прикинуться тем, кто прописан у него в качестве шлюза.
До чего техника дошла, а. Идея - пиздатая.
Или это не техника дошла, а борманд уже совсем дошёл.
Похоже, он proxy-arp зачем-то решил слепить из баша и тцпдампа.
Но вот это какая-то питушня:
Я бы выполнил
busybox ifconfig -a
или
nmcli connection show
И выпарсил оттуда доступные интерфейсы, а то понаплодили своих usb0, enp2s0...
Какой лол)
Такая штука реально будет полезной
«libpcap». «Сырые сокеты» («Raw Sockets») тоже можно использовать, но тогда тебе придётся в юзермоде обрабатывать все пакеты с соответствующего интерфейса, а это сильно нагружает процессор (если, конечно, у тебя на машине хоть какой-то трафик есть).
Тогда лучше pcap, ну и tcpdump же небось его и
Да, «tcpdump» так и работает.
Причём фильтры там очень мощные: https://www.tcpdump.org/manpages/pcap-filter.7.html.
Но мне всё равно нужен роу сокет, чтобы ответить. Я не хочу добавлять свой ип, как броманд.
А роутить трафик ты потом как будешь? Правилом в иптаблес?
Если я хочу, чтобы клиент всегда работал со своим левым шлюзом, то мне придется себе тоже такой IP прописать, иначе придется все делать вручную
Дык она и в виде говноскрипта практическую задачу решала. Переписывать на сишку было бы преждевременной оптимизацией. Да и времени на это ушло бы на порядки больше.
Сгубили всю его семью.
Куда ж теперь идти солдату,
Кому нести печаль свою?
З.Ы. А на настройки компа в данном случае пофиг т.к. это новая сетевуха из-за чего все оси юзают на ней dhcp. Не заработает разве что если ты анально всё зафаерволил и запретил.
У тебя есть коробочка, и к тебе в гости пришел олень. Как ты ему дашь интернет? Купишь ему андрофон с интернетом?