'2016/10'에 해당되는 글 4건

  1. 2016.10.30 AVR LED 작동
  2. 2016.10.22 clear 시 깜빡임 줄이기
  3. 2016.10.21 iptables 방화벽 설정
  4. 2016.10.19 함수를 인자로 넘기는 Func<T, Result>
2016. 10. 30. 23:40

ATMega328P 를 브레드보드에 직접 구성하여 동작시켜 보았다.


인터넷 찾아가며 구성해서 일단 동작은 되긴 되는데...

1초에 한번씩 깜빡거리도록 작성된 코드인데 엄청 느리게 깜빡인다.


외부 클럭 설정문제 또는 크리스탈 불량으로 의심된다.



브레드 보드를 제외한 모든 부품은 알리에서 구매한 것들이다.


USBASP 드라이버는 구글 검색으로 쉽게 찾을 수 있다.


USBASP 핀 구조



카즈마? AVR 프로그래머는 오류... 메시지가 뜨는데.. 걍 무시하고 진행하면 OK 메시지 나온다.


아트멜 스튜디오 에서 컴파일 하고, hex 파일을 카즈마? AVR 프로그래머로 AVR에 집어 넣었다.



사용한 툴

Atmel Studio 7.0

http://www.atmel.com/Microsite/atmel-studio/


Khazama AVR Programmer

http://khazama.com/project/programmer/



소스코드 (인터넷에서 검색한 샘플 소스코드)

#define F_CPU 16000000UL

#include <avr/io.h>

#include <util/delay.h>

int main(void)

{

DDRB |= (1<<DDB5); //Set the 6th bit on PORTB (i.e. PB5) to 1 => output

while(1)

{

PORTB |= (1<<PORTB5);    //Turn 6th bit on PORTB (i.e. PB5) to 1 => on

_delay_ms(1000);        //Delay for 1000ms => 1 sec

PORTB &= ~(1<<PORTB5);    //Turn 6th bit on PORTB (i.e. PB5) to 0 => off

_delay_ms(1000);        //Delay for 1000ms => 1 sec

}



hex 파일

blinkled.zip




결과



정면 샷





Posted by 해비
2016. 10. 22. 00:45

iptables 내용 출력을 clear로 갱신하다가 깜빡임을 줄이고 싶어 검색했더니 역시나 있었다.

http://unix.stackexchange.com/questions/81167/prevent-text-screen-blinking-when-doing-clear



가운데 CMD 부분에 명령을 넣으면 된다.

# flicker less refresh script.
# http://unix.stackexchange.com/questions/81167/prevent-text-screen-blinking-when-doing-clear

#!/bin/sh
watchit() {
    HOME=$(tput cup 0 0)
    ED=$(tput ed)
    EL=$(tput el)
    ROWS=$(tput lines)
    COLS=$(tput cols)
    printf '%s%s' "$HOME" "$ED"
    while true
    do
        CMD="sudo iptables -L -n -v --line-numbers"
        ${SHELL:=sh} -c "$CMD" | head -n $ROWS | while IFS= read LINE; do
            printf '%-*.*s%s\n' $COLS $COLS "$LINE" "$EL"
        done
        printf '%s%s' "$ED" "$HOME"
        sleep 1
    done
}
watchit top -b -n 1



종료하면 문자가 그대로 남아있는채로 커서가 올라가는 것으로 보아 화면전체를 지우기 보다는 바뀐것만 치환하는 느낌인데... 분석해 봐야 할 것 같다.




Posted by 해비
2016. 10. 21. 21:37
리눅스 iptables 방화벽 구성 스크립트 공유 합니다.

여기 스크립트 보고 신선한(?) 충격에 기존 방화벽 소스 대거 고치게 되었습니다.

베이스만 가져와서 대폭 수정하였습니다.


크게 아래 5가지 항목으로 잡았습니다.

1. INPUT PORT TCP
들어오는 TCP 포트 연결

2. INPUT PORT UDP
들어오는 UDP 포트 연결

3. OUTPUT ADDR
나가는 주소

4. OUTPUT PORT TCP
나가는 TCP 연결

5. OUTPUT PORT UDP
나가는 UDP 연결


OUTPUT 기본정책을 DROP 로 만들면 예기치 못한 상황을 겪을 수 있습니다. 처음에 ALLOW 로 설정하고 LOG 로 빠지는 놈이 있나 없나 체크 한 후에 마지막에 DROP 로 설정 합시다.

sudo iptables -L -n -v --line-numbers

이 명령어 한줄이면 아래 처럼 테이블이 나타납니다

빨간 네모 부분 LOG에 패킷, 바이트가 0 이 아니면 이쪽으로 향하는 길 잃은 영혼(패킷-_-)이 존재 한다는 겁니다.


dmesg 명령어로 LOG를 확인하고 출발지, 목적이 IP, PORT, prot 등을 확인하여 규칙을 추가하여 줍시다.


위 내역에서 숫자가 발생한 부분은 각각 패킷, 데이터가 얼마나 흘렀는지를 알 수 있는 부분이며, 0 은 아직 한번도 이 쪽 규칙을 타지 않았음을 나타냅니다. (한참 지켜보고 필요없다 싶으면 제거할 수도 있겠죠? ㅎㅎ)




현재 설정에 apt 패키지 업데이트 호스트도 추가해야 되는데 빠졌네요.
apt-get 하면 업데이트 서버에 접근 못합니다. OUTPUT도 막았으니까요.
이 부분은 OUTPUT ADDR에 업데이트 서버의 주소나 IP 추가해 주면 됩니다.

나가는 주소에 허용된 유일한 내역은 현재 서브넷 대역 (제 경우 172.17.10.0/24)을 설정하였는데 이 부분은 내부 네트워크의 주소에는 접근이 가능하게 하고자 함입니다.

그리고... NAT 부분은 VPN 때문에 설정하였습니다.
FORWARD 를 DROP 하면 NAT의 MASQUERADE 가 동작하지 않습니다. (패킷 전달을 막으면 안되는게 당연하겠죠?)
고로 여기서는 NAT 때문에 FORWARD를 막지 않습니다만, 필요없으면 DROP 이 보안상 좋겠네요.

#!/bin/bash

# Haebi's iptables script 
# http://haebi.kr, http://haebi.net

# based on
# https://gist.github.com/thomasfr/9712418

# Check iptables status
# sudo iptables -L -n -v --line-numbers

IPT="/sbin/iptables"

# Your DNS servers you use: cat /etc/resolv.conf
DNS_SERVER="
	8.8.4.4
	8.8.8.8
"

# Service List (TCP)
# -----------------------
# 22		SSH
# 80		Web
# 443		Web (HTTPS)
# 1194		OpenVPN #1
# 1196		OpenVPN #2
# 3306		MySQL
# 21		FTP (Command)
# 50000:51000	FTP (Data)
# 137:139	SAMBA
# 445		SAMBA

ALLOW_INPUT_PORT_TCP="
	22
	80
	443
	1194
	1196
	3306
	21
	50000:51000
	137:139
	445
"

# Service List (UDP)
# -----------------------
# 53		DNS
# 137:139	SAMBA
# 8649		ganglia

ALLOW_INPUT_PORT_UDP="
	53
	137:139
	8649
"

# Allow outgoing access
ALLOW_OUTPUT_ADDR="
	172.17.10.0/24
"

# Allow outgoing TCP
# 22		ssh connect other server

ALLOW_OUTPUT_PORT_TCP="
	22
"

# Allow outgoing UDP
# 123		ntp syncs

ALLOW_OUTPUT_PORT_UDP="
	123
"

$IPT -P INPUT ACCEPT
$IPT -F

# Allowing DNS lookups (tcp, udp port 53) to server
for ip in $DNS_SERVER
do
	$IPT -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
	$IPT -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
done

# Allow any connection from this host.
$IPT -A INPUT  -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Allow all broadcast traffic.
iptables -A INPUT -m pkttype --pkt-type broadcast -j ACCEPT

# Open Incoming TCP Ports
for PORT in $ALLOW_INPUT_PORT_TCP
do
	$IPT -A INPUT  -p tcp --dport $PORT -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A OUTPUT -p tcp --sport $PORT -m state --state ESTABLISHED     -j ACCEPT
done

# Open Incoming UDP Ports
for PORT in $ALLOW_INPUT_PORT_UDP
do
	$IPT -A INPUT  -p udp --dport $PORT -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A OUTPUT -p udp --sport $PORT -m state --state ESTABLISHED     -j ACCEPT
done

# Allow out going access
for ip in $ALLOW_OUTPUT_ADDR
do
	$IPT -A OUTPUT -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A INPUT  -s $ip -m state --state ESTABLISHED     -j ACCEPT
done

# Allow out going TCP access
for port in $ALLOW_OUTPUT_PORT_TCP
do
	$IPT -A OUTPUT -p tcp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A INPUT  -p tcp --sport $port -m state --state ESTABLISHED     -j ACCEPT
done

# Allow out going UDP access
for port in $ALLOW_OUTPUT_PORT_UDP
do
	$IPT -A OUTPUT -p udp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPT -A INPUT  -p udp --sport $port -m state --state ESTABLISHED     -j ACCEPT
done

#######################################################################################################
## Global iptable rules. Not IP specific

# Allow outgoing icmp connections (pings,...)"
$IPT -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT  -p icmp -m state --state ESTABLISHED,RELATED     -j ACCEPT

# Simple Service Discovery Protocol
$IPT -A INPUT -p udp --dport 1900 -d 239.255.255.250 --state NEW -j ACCEPT

# Multicast address
# 224.0.0.1 The All Hosts multicast group addresses all hosts on the same network segment.
$IPT -A INPUT -d 224.0.0.1 -j ACCEPT

# 224.0.0.22 Internet Group Management Protocol
$IPT -A OUTPUT -d 224.0.0.22 -j ACCEPT

# Device discovery
$IPT -A INPUT  -d 239.255.255.250 -j ACCEPT
$IPT -A OUTPUT -d 239.255.255.250 -j ACCEPT

# Default -----------------------------------------------------------------
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Log before dropping
$IPT -A INPUT  -j LOG  -m limit --limit 5/min --log-level 7 --log-prefix 'IP INPUT drop: '
$IPT -A OUTPUT -j LOG  -m limit --limit 5/min --log-level 7 --log-prefix 'IP OUTPUT drop: '

# If forward drop then NAT Masquerade will not work.
$IPT -P INPUT DROP
#$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -nL

# NAT ---------------------------------------------------------------------
$IPT -t nat -F
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 10.8.2.0/24 -d 172.17.10.0/24 -o eth0 -j MASQUERADE
$IPT -t nat -nL










Posted by 해비
2016. 10. 19. 07:07

.Net 3.5 이상부터 지원되는 Func<T, T Result> 를 사용하면 함수를 인자로 넘길 수 있습니다.


무슨 말인고 하니 함수를 콜 하였는데 그 함수 내부에서 다른 쪽의 함수를 실행해야 하는 경우가 있습니다.


이해를 돕기 위해 예문을 추가합니다.


using System;

namespace test1019
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassA ca = new ClassA();

            ca.AA(BB); // 함수 BB 를 AA의 인자로 넘깁니다

            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
        }

        public static bool BB()
        {
            // do something...
            Console.WriteLine("BB");

            return true; // T Result 때문에 임의의 리턴값을 설정. 특별한 의미는 없다.
        }

        class ClassA
        {
            public void AA(Func<bool> func)
            {
                // do something
                Console.WriteLine("AA");

                func(); // AA 수행 중 클래스 바깥에 있는 BB()를 실행
            }
        }

    }

}

리턴타입이 void 형인 함수는 넘길수 없다는 것에 유의해 주세요.

Func<T, T Result> 가 인자 T는 생략이 가능하지만 T Result 인자는 생략이 안됩니다.




MSDN 링크 입니다.

https://msdn.microsoft.com/ko-kr/library/bb549151(v=vs.110).aspx



Posted by 해비