LINUX.ORG.RU

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

 


0

2

Здравствуйте! Несколько месяцев назад, я решил изучить сетевое программирование,GNU/Linux и криптографию, желательно всё в комплексе. Разобраться с GNU/Linux мне помогла установки Gentoo и несколько месяцев настройки. Изучил основную теорию по сетям (протоколы TCP/IP,UDP,... SSL/TLS, структуру пакетов). Изучил BSD Socket API и основы криптографии (симметричное и ассимитричное шифрование, сертификаты/подписи) . Чтобы закрепить знания я написал на С простого клиента и сервера TCP/IP, пересылающих символьную строку, по средством сокетов. После некоторого времени гугления, я решил двигаться в сторону написания снифера. При его написании я изучил структуру пакетов, что такое SOCK_PACKET. Но мне все равно кажется это недостаточным. Я также написал на С клиента и сервера, передающих данные по TLS 1.2, с использованием библиотеки OpenSSL. Я не нашел в сети подходящие для меня задачи. В основном советы ,по дальнейшему развитию навыком, касаются добавления дополнительного функционала в простые клиент серверные приложения (добавить кеширование, обработка нескольких клиентов одновременно, добавить хэндлы для ошибок). После гугления, из идей только написание своего sanbox'a (как раз тут С пригодится и возможно криптография), но это не сильно относится к сетям, и программу по примеру SSLstrip (для MITM атак). Не считаю эти идеи перспективными для вливания энергии (а может я ошибаюсь?).

Подскажите пример задачи (или ресурсы где их можно найти), которая будет достаточной сложной, лежать в области сетевого программирования и включать в себя использование языка С, GNU/Linux'а и прикладной криптографии )

(чисто как хобби. английский знаю. во времени не ограничен)



Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от chocobo

Но хотелось бы именно с нуля что-то сделать и не могу представить какой софт я могу написать для себя)

Я думаю, что для себя практически никакой :) Присоединись к портированию i2p, или запили свою шифрованную анонимную децентрализованную сетку. С твоими знаниями это по силам. Еще интересны проекты самоорганизующихся беспроводных сетей, тут даже идей не очень много...

А вообще, правильно посоветовали поискать работу. Но помни - сеть ради сети почти нигде не нужна. Хорошая реализация сетевого обмена та, которую практически не замечаешь в программе. Так что твой навык нужен для того, чтобы не перегружать приложение излишним кодом работы с BSD-сокетами с одной стороны. С другой стороны - не городить 100500 классов и свою RPC с кодогенератором из idl, чтобы выиграть потом 2 строчки.

anonymous
()

На предприятиях и у быдлоадминов востребована задача простого и быстрого обхода NAT. Можно попробовать сделать удобные сервер и вспомогательные утилиты для быстрого «проброса» портов TCP/UDP наружу с авторизацией, шифрованием, обменом большими секретными ключами через флешку и подобным. Можно конечно обойтись netcat'ом, или ssh -L/R, но иногда всю голову сломаешь пока настроишь как следует. Иногда приходится по 2 раза делать ssh -L и ssh -R. Посему всякие TeamViewer (особенно с драйвером VPN) рулят и педалят.

Суть примерно такая: сервер на компе с белым IP и утилиты запускаемые на машине админа и машине пользователя, которые смогут относительно легко и удобно организовать проброс порта между двумя компами с серым IP. Можно утилитку на компе админа и демон, управляемый админом, на другой стороне. Авторизация, шифрование и логирование трафика будут хорошим плюсом.

anonymous
()

приступай к следующему этапу - асинхронной работе сокетов. потом попробуй прикрутить многопоточность.

PS: судя по описанию, что ты уже смог написать - язык Си ты уже выучил. это лишь инструмент, к тому же весьма простой. нужно прокачивать скилы в технологиях, системах и тд. вообще, в арсенале у каждого девелопера должно быть несколько языков - С и/или С++, какой-нибудь скриптовый (питон, перл и т.д.), какой-нибудь функциональный (ерланг, скала, хаскель и тд). Другими словами - это просто инструменты. А вот умение их прикладывать к чему-то будет зависить от знаний технологий/систем в тех или иных областях.

Deleted
()
Ответ на: комментарий от antonsv

Чем оно лучше Tox? Особо на сайте подробностей не увидел, судя по всему оно мало что умеет.

RisuX3
()
Ответ на: комментарий от anonymous

Спасибо всем, много интересных идей! Мое решение - присоединился к vvviperrr'у, писать open source фаерволл для андроида. Я как раз ничего не знаю об андроиде и никогда не писал фаерволлы. Думаю, будет интересно)

chocobo
() автор топика

Если освоил, значит telnetd уже написал. Осталось:

smtpd httpd dhcpd vpn на tun/tap

anonymous
()
Ответ на: комментарий от anonymous

как раз с этим tun/tap сейчас и разбираюсь)

chocobo
() автор топика

Аналог дропбокса, работающего с WebDAV и поддерживающего шифрование передаваемого трафика.

mkam
()
Ответ на: комментарий от vzzo

Не беда: если нужно будет сделать что-то хитрожопое — подправлю. Тоже мне, проблема...

Eddy_Em ☆☆☆☆☆
()
6 ноября 2014 г.

напиши нормальный торрент-клиент.

извиняюсь, что откопал, но наболело

MyTrooName ★★★★★
()

Попробуй устроиться девелопером в компанию-производителя сетевого оборудования: juniper, fortinet, extreme, zyxel, paloalto, hp, riverbed, d-link и др.

andrew667 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.