вторник, 13 сентября 2016 г.

USB-Keyboard with Arduino


http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/



https://florianfries.me/en/arduino-as-a-keyboard.html




http://www.vladcazan.com/electronics/arduino-keyboard-emulator
http://robocraft.ru/blog/1002.html


Arduino как HID-устройство


Необходимо перепрошить mega8u2
















взято с https://vk.com/blynk

Немного предистории:
Посте того, как сгорел мой "ноутбук", я вспомнил про свой старый системник (точнее материнку и блок питания).
Достав его из кучи барахла, заметил что кроме мышки нету никакого устройства ввода, немного посидел,и начал рыть инет. Так как у меня в асоррименте только Arduino UNO R3 смотрел статьи только с ней. Многие делают клавиатуру на Arduino micro (ну там все просто).

В поисках наткнулся на статью где ардуино играет в 2048. Так как для упавления игрой надо нажимать клавиши, нужно превратить ардуино в клавиатуру.То что надо!


Приступим:

Нам понадобится:
  • Arduino UNO R3
  • Перемычка
  • Arduino IDE
  • Фирменная утилита Atmel – Flip
  • Архив с прошивками и примером + библиотека
Цель: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре.
Алгоритм наших действий:
  • Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  • Прошиваем загрузчик Arduino, usb контроллер ATmega16U2
Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard.
Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.
Немного теории.
Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.
Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB <-> COM (FT232R). Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB. Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino.
Для  Arduino UNO R3 достаточно поставить перемычку.


После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU.

Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – ATmega16U2. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.


  • Выбираем в меню Device > Select > ATmega16U2
  • Выбираем в меню Setting > Communication > USB
  • Жмем Open берем прошивку
  • Приступаем к прошивке, жмем Run
По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.

Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому.

Чтобы вернуть Arduino UNO к жизни надо перепрошить ATmega16U2
Найти прошивку можно тут:
C:\Program Files\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
На всякий случай собрал весь софт который использовал в

  - Arduino-HID-Bot-2048.ino - Скетч для Arduino UNO для игры в 2048.
   
  - Arduino-keyboard.hex       - этот hex файл заливаем при помощи FLIP для перевода arduino
в режим USB клавиатуры (но сначала нужно залить основной скетч).

прошиваем вот так!


шьем по isp

делаем клавиатуру

avrdude -p m16 -b 19200 -F -P COM4 -c avrisp -U flash:w:Arduino-keyboard-0.3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m




"-p m16" это код atmega16u2


делаем копию arduino uno R3

avrdude -p m328p -b 19200 -c avrisp
 -P COM13 -e -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex

   
  - Arduino-usbserial-uno.hex - этот файл нужен для того чтоб обратно вернуть Arduino UNO
в стандартный режи работы, чтоб она определялась в ПК как виртуальный COM-порт
в котром мы можем загружать скетчи. 
https://vk.com/doc5127466_437873517

http://www.atmel.com/tools/FLIP.aspx


 Дополнительно:

Arduino UNO R3 Mouse HID

 http://pythoneiro.blogspot.ru/2015/04/transformando-seu-arduino-uno-em-um-usb.html





четверг, 28 июля 2016 г.

Удаления файла или каталога по маске в Linux

Удаления файла или каталога по маске

Удаляем файлы и каталоги по заданным критериям или маске. Есть несколько вариантов удаления. Прицеп прост, собрать структуру файлов или директорий и удалить.
Для сбора данных как всегда используем команду find, но многие не смотрели ее дополнительных возможностей. Есть ключ -delete с помощь которого можно сразу и удалить выбранные объекты.
Удаляем все файлы (ключ -type f ) с именем упоминание в имени "*text*" в каталоге ./test/:
find ./test/* -type f -name "*text*" -delete
Удаляем все пустые каталоги по маске
find ./test/* -type d -name "*" -empty -delete
А если каталог или директория заполнена прибегаем к команде rm .

Удаление каталога с файлами

Удаляем конкретный каталоги с файлами.
rm -dfR ./test/dir1
Удаляем каталог с файлами по маске
find ./test/* -type d -name "*dir*" | xargs rm -dfR
Приятного использования и удаления.



 источник1

Удалить файлы, содержащие в названии определенный текст можно следующими способами:
1: locate *часть_имени* | xargs rm
2: find . -name "*~" -type f | xargs rm -f


источник2

Предположим что файловая шара Samba находится у нас по адресу: /home/samba/public в которой уже лежат папки и файлы пользователей.
Тогда запрос принимает вид:

find /home/samba/public -type f -name "~$*.*" -delete


"~$*.*" -маска имени файла, если нужно удалить например: файлы mp3, то будет иметь вид "*.mp3", а если требуется удалять приложения, то "*.exe"
Данное задание можно засунуть в Cron и выполнять по ночам, когда сервер не используется.
Решение подходит для всех дистрибутивов Linux.

вторник, 26 июля 2016 г.

Поиск самой большой папки unix, linux

du —max-depth=1 -B M |sort -rn
 
-h -x забыл
-h — human, что бы не в байтах, а в гигабайтах/магабайтах/килобайтах и т.д. писало
-x — одна файловая система, если внутри просматриваемого каталога примонтирован другой диск, то пропускать его
и вместо —max-depth=1, можно писать -d 1

понедельник, 11 июля 2016 г.

понедельник, 30 мая 2016 г.

скачать файлы с FTP

How FTP Multiple Files from the Command Line

источник

Many times I am challenged to move many similar files from one server to another.  Either I have to remote-desktop on to the server (Windows), or have a session on the server (AIX, Linux).  In these situations, I do not have a nice GUI utility, like FTP Voyager, setup to move my files.  There are some good basic commands in FTP that make life easier to move many like files.
C:\ ftp <my server name>
ftp> bin
ftp> prompt no
ftp> mget <start of the like files> *

Below are commands that I use to move multiple files at in a couple commands.
binary or bin: when you set to binary mode, you’ll receive a message “200 Type set to I”.  The default mode for FTP is ASCII.  Binary mode transmits the raw bytes of a file.  This is useful when moving zipped or executable file.  If you transmit your executable or zipped file in ASCII mode, you may find it corrupted on the receiving server.  To save time & typing, you can type “bin”, and the FTP utility will recognize it as the command “binary”.
prompt no: by default the prompt is set on to check if you want the download the file.  When you set your prompt mode to no, your will get an message “Interactive mode OFF”.  By setting the prompt to no, the FTP utility will automatically download multiple files without prompting.
Below is an example of being prompted for each file & why you may want to avoid this (you have to type either y or n for each file):
— very bad if you have to move hundreds to thousands of files
mget: this command can retrieve multiple files at a time.  View some of the example below:
FTP> mget file01 file02 file03
separate each file with a space
FTP> mget filename*
FTP> mget *.txt
start or finish with the common characters in the file name, and the star (*) can be used as a wildcard character
mput: this command is used like mget to upload multiple file to the remote computer
FTP> mput file01 file02 file03
separate each file with a space
FTP> mput filename*
FTP> mput *.txt
start or finish with the common characters in the file name, and the star (*) can be used as a wildcard character
Why I write this:
When I started working more with linux & AIX operating systems, I remember spending a lot of time to put together all the commands that I would need to upload system patches or to script the movement of log files.  This week, cleaning up my personal folder, I found the notes I had to put these together.  My hope is that these notes helps someone cut down on the number of message board they have to search to find the commands need to accomplish these tasks.

Ftp за NAT

Ftp за NAT проброс портов и настройка диапазона. 

за основу взята статья

Стандартная задача - пробросить ftp за Nat. Небольшая сложность в том, что нужно кроме 21 порта пробросить диапазон дополнительных портов и настроить сам ftp на указаение данного диапозона и ip внешнего интерфейса.
К примеру, выделим для ftp порт 2100 и 10000-10100
Локальный ftp сервер работает на 192.168.122.100 порт 21.

Тогда настройки iptables для "шлюза":

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 2100 -j DNAT --to-destination 192.168.122.100:21
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 10000:10100 -j DNAT --to-destination 192.168.122.100

И в самом ftp надо указать эти нюансы. В случае vsftpd это делается добавлением строк:

pasv_min_port=10000 ;Указываем используемые сервером порты, первый
pasv_max_port=10100 ;и последний
pasv_address=_внешний_ip_шлюза_

В первом приблежении можно считать настроенным.

 Правила firewall на gate:

$IPT -t nat -A PREROUTING -i $REAL_IF -p tcp -m tcp --dport 60021 -j DNAT --to-destination 192.168.0.57:21

$IPT -t nat -A PREROUTING -i $LOCAL_IF -p tcp -m tcp --dport 60021 -j DNAT --to-destination 192.168.0.57:21

 $IPT -t nat -A PREROUTING -i $LOCAL_IF -p tcp -m tcp --dport 10000:10100 -j DNAT --to-destination 192.168.0.57

$IPT -t nat -A PREROUTING -i $REAL_IF -p tcp -m tcp --dport 10000:10100 -j DNAT --to-destination 192.168.0.57



добавить в функцию  на firewallе :
 function default_policy()
{
    /sbin/modprobe ip_conntrack
    /sbin/modprobe ip_conntrack_ftp
    /sbin/modprobe ip_nat_ftp

....
}

 конфиг proftpd:


 Include /etc/proftpd/modules.conf
UseIPv6 off
ServerType standalone
MaxInstances 30
SystemLog   /var/log/proftpd/proftpd.log

TimesGMT off
SetEnv TZ :/etc/localtime


        CharsetLocal KOI8-R
        CharsetRemote CP1251


#UseReverseDNS off

MasqueradeAddress 100.100.100.100

PassivePorts 10000 10100

  <IfModule mod_facts.c>
    FactsAdvertise off
  </IfModule>

ServerName "oen_PR_ftp"
DeferWelcome off
Port 21
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin                    welcome.msg
ListOptions                 "-l"
DenyFilter \*.*/
# Пользователь, под которым будет запускаться FTP-сервер
User proftpd
# Группа, с которой будет запускаться FTP-сервер
Group nogroup
# Маска (права доступа) для файлов (первое значение 022) и каталогов (второе значение 022), создаваемых в каталогах
Umask 022  022
# Разрешить перезаписывать существующие файлы
AllowOverwrite on
# Для каждого пользователя в качестве корневого каталога устанавливаем его домашнюю папку. В этом случае пользователь не сможет выйти выше, т.е. попасть в /var/ftp или /var/ftp/check
DefaultRoot ~

# Настраиваем права доступа к пользовательским каталогам

# для каталога  /ftp/check:
<Directory /var/ftp/check>
# Пусть check имеет полный доступ к своей папке (закачивать файлы, скачивать файлы, создавать папки, удалять )
Umask                022  022
<Limit WRITE>
AllowUser check
</Limit>
</Directory>
# Настраиваем логи
TransferLog /var/log/proftpd/xferlog

# Отключаем проверку командного интерпретатора пользователя
RequireValidShell off
# указываем файл с учетными записями для авторизации пользователей
AuthUserFile        /etc/proftpd/ftpd.passwd
# Include other custom configuration files
Include /etc/proftpd/conf.d/
AllowForeignAddress on








среда, 25 мая 2016 г.

Windows - schedule tasks in command line using schtasks

Windows - schedule tasks in command line using schtasks

source

You may need the following schedules in Windows:
 1) every day ftp file to another computer on 11:00pm
2) every day check new files created and redirect the result to a log file
3) every day dump mysql database
4) check any malware run in schedule

You can use   schtasks in comman prompt.
1) schtasks help
schtasks /?
2) Query existing schedules
schtasks /QUERY /FO LIST   /V
3) Create a new schedule
 schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day]
 [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate]
 [/s computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rp Password]] /?


Example
I have ftp script: ftp1.txt
open 137.82.***.***
username
password
lcd C:\sql_dumps\mysql_admin
cd dbfile
mput *.sql
y
bye


I create a executable file jiansen_ftp.bat
ftp -s:ftp1.txt

Create a schedule to run jiansen_ftp.bat every day 23:58:00
 schtasks /create /tn "myftp" /tr C:\sql_dumps\jiansen_ftp.bat  /sc daily /st 23:58:00
Video: Windows - schedule tasks in command line using schtasks