2012년 12월 12일 수요일

udp 소켓 생성 문제

윈도우 2008에서 c++로 작성한 프로그램이

tcp 소켓 생성은 정상적으로 되는 데, udp 소켓은 생성되지 않는 문제가 있다.

원인은 ip 값을 localhost로 만든 게 원인.

localhost 를 111.222.111.111 이런 식으로 직접 쳐 주면 해결 되었다.

 

역시 이상한 문제;;

도메인에 _(언더바) 사용의 폐해

도메인에 _(언더바) 사용의 폐해

하나의 도메인이 있다.
_(언더바)가 들어가 있는 도메인이다.
도메인에서 사용가능한 문자집합은 A-Z', 'a-z', '0-9', '-' 이다.
RFC 표준에는 _(언더바)를 사용가능한 문자집합에는 들어있지 않지만, 되긴된다.
네이버 카페인  DNS 전문가 카페  에서 검색해본 결과
bind 8.2.3 이전에서는 허용하기는 하였으나, 이후에는 엄격히 제한 되고 있다고 한다.

도메인에 언더바가 들어가도 일단 되긴 되는 데, 쓰지 말자.

이렇게 장엄하게 설명한 이유는 그 폐해를 경험 했기 때문이다.
이건 선임한테 물어봐도 안 나오고, 검색해도 안 나오는 문제다.

 

1. 익스에서 쿠키 생성이 안된다.
익스만 쿠키 생성이 안된다.
처음에는 익스의 쿠키 사용안함으로 되어있는 옵션를 확인 해 봤지만, 안된다.
익스 버젼 문제인가 했지만, 다른 버젼에서도 안됬다.
크롬,사파리,파이어폭스 심지어 안드로이드 기본 브라우져에서도
되는 쿠키 생성이 익스에서만 안된다.
처음 이런 현상을 접했을 때, 뭐 이런 경우가 다 있나 했는 데, 나중에 알고 보니 도메인 언더바 문제였다.
쿠키 생성은 물론 세션 생성도 안된다. 이경우는 도메인 변경후 테스트를 안해 봤지만, 확실할 것이다.

 
2. url창에서 해당 도메인으로 바로 들어가기가 안된다.
몇몇 브라우져에서는 언더바가 들어가 있는 도메인은 자동으로 http를 붙여서
해당 도메인으로 넘겨 주지 않고, 검색을 해 버린다.
그래서 http:// 를 붙여주고 나서야 해당 도메인으로 연결된다.

 

3. 안드로이드에서 .apk 파일 다운로드가 안된다.

처음에는 검색해서 나온 mime 타입 적어주는 걸로 해결하려고 했지만 안됬다.
일반 pc 브라우져에서는 해당 경로만 적어주면 모두 apk 파일이 다운된다.
안드로이드 기본 브라우저 나 크롬에서 해당경로를 적어 넣으면 파일 다운로드 실패가 뜬다.
(아이폰 사파리에서는 된다...필요는 없지만..)
이 역시 도메인 언더바 문제였다.

해결하고 나니 허탈하네...

2012년 11월 21일 수요일

호스팅 환경에서 disable해야할 PHP 함수들 목록

호스팅 환경에서 disable해야할 PHP 함수들 목록

 

system, show_source, exec, shell_exec, proc_open, passthru, set_time_limit, ini_restore, mysql_list_dbs, ini_alter, dl, pfsockopen, openlog, syslog, symlink, link, chgrp, leak, popen, escapeshellcmd, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, virtual, mb_send_mail

ini_set이 고민이 되기는 하는데... 이건 써야 할 필요가 있을 때도 있어서...


 

2012년 11월 19일 월요일

구글 vs 네이버 애널리틱스 비교.

웹사이트의 통계를 분석해 주는 애널리틱스를 기존에는 구글만 알고 있었는데,
네이버에서도 같은 서비스를 하고 있다는 걸 알 게 됐다.
다음도 있었는데, 서비스 종료.

개인적으로 구글에서 제공하고 있는 통계 화면은 눈에 확 띄지 않아서, 사용하기 불편한 점이 있다.
네이버는 딱 필요한 기능들이 보게 좋게 메뉴들로 나열 되어서, 보다 정확한 비교가 가능 한 것 같다.

네이버 애널리틱스에 한표~

2012년 11월 16일 금요일

마이크로 유심 사용 스마트 폰

마이크로 유심 사용하는 기기를 검색해서 정리해 봤다.
검색해서 얻은 결과라 정확하지 않을 수 있으니, 한번더 확인 하시고 사용하세요.

 

옵티머스 LTE 2
옵티머스 뷰 (옵뷰)
노키아 루미아
갤럭시 노트
갤럭시 노트 2
갤럭시 3 3g
갤럭시 S2 HD LTE (갤치디)
애플 제품 (아이폰3gs 제외)
모토로라 레이저

마이크로유심을 일반유심으로 사용하기
http://olpost.com/r/715297

다른 제품 아시는 거 있으면 댓글로 남겨주세요~

 




 

2012.11.19 추가

아래의 사이트에서 자세히 검색이 가능 하다.

스마트폰 스펙 검색 사이트



우측 상단에다가 영문으로 스마트폰 이름을 검색하거나, 왼쪽 메뉴를 이용하여 찾고자 하는 스마트폰 종류를 선택 후, 상단의 SIM 부분이 Micro-SIM 으로 되어 있는 지, 체크.

php 보안 관련 php.ini 설정

보안업체에서 제공한 php 보안 옵션.

php.ini 의 설정 값을 아래와 같이 맞춘다.

allow_url_fopen = Off
safe_mode = On
register_globals = Off
magic_quotes_gpc = On
display_errors = Off

 

기존의 사용하고 있는 것들은 이렇게 변경시 제대로 동작 하지 않는 경우가 상당할 듯 하다.

새롭게 설치하는 서버의 경우 위와 같이 설정하고, 개발도 보안에 맞게끔 해야 한다.

2012년 11월 13일 화요일

특정 아이피 연결 끊기

특정 아이피에 대한 커넥션을을 끊어야 할 경우 tcpkill 명령을 사용하면 된다고 한다.

tcpkill은 dsniff 패키지에 포함 되어 있다.

설치방법

tcpkill 이 필요한 서버(CentOS release 5.7 (Final))에서 libnids가 yum 으로 설치되지 않는다.
해서 그냥 명령어 조합으로 사용해서 썼는 데, 그냥 저냥 유용한 것 같다.
lsof -n -i@194.219.126.61 | awk {'print $2'} | xargs kill -9
아이피 부분만 바꿔서 사용하면 된다.

 

2012년 11월 7일 수요일

L4 로드밸런싱 구성후 속도 느린 현상

Nortel Application Switch 3408 과 시스코 2950 스위치를 이용하여 로드밸런싱으로 구성하였다.

대체적으로 문제는 없는 데, 클라이언트 측에서 홈페이지 속도가 느리다고 함.

우리 사무실은 빠름..ㄷㄷ;

일단 예전의 기억을 더듬어 스위치의 Speed 와 duplex 확인.

업링크 포트인 24번 포트가 Duplex 가 Half로 잡혀 있음.. ㄷㄷ;

일단 Half를 Full로 설정 함.

이때 잠깐 네트워크 다운 됬다 올라오는 데, 네트워크가 죽어버린 줄 알고 식겁함. ㄷㄷ;

설정 완료하고, 클라이언트 측에 연락.

빨라 졌다고 하는 데, 내 컴퓨터에서는 원래부터 빨라서, 이거 문제인지 애매함.

 

2012.12.03  추가

사용자가 늘어나니 느려지는 현상 발생.

서버쪽에는 로드가 많지 않음.

스위치 로그 확인.

duplex mismatch discovered on FastEthernet0/24 (not half duplex), with Reno_Backbone GigabitEthernet6/18 (half duplex).
L4쪽 포트외에 백본 스위치의 포트 역시 맞춰줘야 했음.

L4와 L2간에는 is experiencing errors


 

2012년 11월 6일 화요일

Plugin "refresh-packagekit" can't be imported

yum을 이용하려고 보니 에러메시지가 뜬다.
[root@localhost ~]# yum list
Plugin "refresh-packagekit" can't be imported
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: centos.mirror.cdnetworks.com
* extras: centos.mirror.cdnetworks.com
* updates: centos.mirror.cdnetworks.com
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in <module>
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 285, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 136, in main
result, resultmsgs = base.doCommands()
File "/usr/share/yum-cli/cli.py", line 434, in doCommands
self._getTs(needTsRemove)
File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 99, in _getTs
self._getTsInfo(remove_only)
File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 110, in _getTsInfo
pkgSack = self.pkgSack
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 897, in <lambda>
pkgSack = property(fget=lambda self: self._getSacks(),
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 682, in _getSacks
self.repos.populateSack(which=repos)
File "/usr/lib/python2.6/site-packages/yum/repos.py", line 294, in populateSack
sack.populate(repo, mdtype, callback, cacheonly)
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 165, in populate
if self._check_db_version(repo, mydbtype):
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 223, in _check_db_version
return repo._check_db_version(mdtype)
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1256, in _check_db_version
repoXML = self.repoXML
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1455, in <lambda>
repoXML = property(fget=lambda self: self._getRepoXML(),
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1447, in _getRepoXML
self._loadRepoXML(text=self)
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1437, in _loadRepoXML
return self._groupLoadRepoXML(text, self._mdpolicy2mdtypes())
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1412, in _groupLoadRepoXML
if self._commonLoadRepoXML(text):
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1240, in _commonLoadRepoXML
self._repoXML = self._parseRepoXML(result)
File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1036, in _parseRepoXML
return repoMDObject.RepoMD(self.id, local)
File "/usr/lib/python2.6/site-packages/yum/repoMDObject.py", line 124, in __init__
self.parse(srcfile)
File "/usr/lib/python2.6/site-packages/yum/repoMDObject.py", line 140, in parse
parser = iterparse(infile)
File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1169, in cElementTree_iterparse
_cElementTree_import()
File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1164, in _cElementTree_import
import cElementTree
ImportError: No module named cElementTree

 

원인은 오라클 설치시 지정한 $LD_LIBRARY_PATH 문제이다.

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

profile 이렇게 지정하고 지정하고 사용하는 데, 문제는 오라클 먼저 찾고 나서 그다음 시스템의 경로를 찾는 데, 오라클 라이브러리 경로의 libexpat가 있으니까 이걸로 yum 실행하는 데,

이게 아니라 시스템의 라이브러리 패스를 찾아야 하는 맞게 동작하는 것이다.
export LD_LIBRARY_PATH=/lib64/

위 명령어를 실행 후 하면 제대로 동작한다.

 

 

 

2012년 10월 31일 수요일

swfupload 에 addPostParam 작동 안되는 문제.

진짜 간단한 문제인 데, 이것 때문에 이틀 날렸음;;

setting 값에  use_query_string : true, 를 추가.

위의 값은 기본이 false 이므로 추가가 필요하고,

addPostParam 뿐만 아니라,post_params를 이용하기 위해서도 true로 설정 해야 한다.

2012년 10월 11일 목요일

L2 스위치 포트별 아이피 찾기 프로그램 (포트매핑)

L2 스위치에선 포트별 아이피를 찾을 수 없는 데, 이걸 L3장비와 연계하여 찾는 프로그램(포트매핑)을 만들어 봤다.

포항공과대학의 김은희님이 쓰신 논문이 유용한 자료가 되었다.

해당 논문에서 처럼 제대로 된 프로그램으로 만들고 싶지만, 이미 상용프로그램이 많은 상황에서 그정도의 퀄리티를 뛰어넘을 자신도 없고, 그냥 구현 해 본데에 의의를 둔다.

이미 상용으로 솔라윈즈나 OpUtils 등에 해당 기능이 포함되어 있다.

솔라윈즈의 switch port mapper 프로그램과 비교하여 보니, 정확히 비슷하진 않지만, 얼추 맞는 것으로 보인다.

문제 있을 수 있는점.
1. vlan 별로 별도 지정이 안되있어서, vlan을 추가한 L2장비에서는 어떻게 될 지 모르겠다.
2. 구글 검색하다가 보게 된건데, 시스코외의 장비에서는 조금 다른 MIB 를 사용하고 있는 것 같다.(표준MIB라고 해서 사용하기 했는 데, 잘 모르겠다.)

ps.
php 를 통해 구현했는데,  보통 호스팅으로 사용하는 서버에는 snmp 내장함수가 설치되어 있지 않다.

 

DEMO

 다운로드

2012년 10월 2일 화요일

MRTG cpu,mem,hdd,load average,active user, process,traffic 템플릿

아래의 출처에서 다운받은 템플릿.

해당 템플릿을 다운 받고 cfgmaker 에서 옵션을 --host-template=host-generic.htp 추가하여 사용하면된다.

다만 해당사이트에서 다운받은 템플릿으로 생성한 cfg 파일을 indexmaker로 만들때 아래와 같은 에러메시지가 뜬다.

ERROR: no H1 line pagetop property in 아이피-memory section

indexmaker에서 pagetop 옵션에는 H1 태그로 찾는 게 기본값인데, 해당 템플릿에서는 H1 지정이 안되어 있다.

해당 문제는 -section 옵션으로 해결할 수 있다.

아래의 옵션중에 h1 외의 옵션으로 설정하여 실행하면 된다.


 - section = h1 섹션의 헤딩으로 PageTop에 h1 태그를 사용 (기본값)
- section = title 그래프 섹션 헤딩으로 Title을 사용
- section = name 섹션 헤딩으로 그래프 이름을 사용
- section = descr 섹션 헤딩으로 그래프 description을 사용
- section = portname 섹션 헤딩으로 PageTop에 port 이름 항목을 사용


아래는 H1 태그 추가한 버젼.



# Generic host template for all systems support MIB-II host resources
# MIB. Will take care of storage devices as well, but watch out for
# changes in enumeration caused by inserting USB devices!

# Watch out for lines being wrapped by broken editing software

$head_lines .= "#---------------------------------------------------------------------\n";

if( $sysdescr =~ /linux/i ) {
$target_lines .= "routers.cgi*Icon: linux-sm.gif\n";
} elsif( $sysdescr =~ /(windows|microsoft)/i ) {
$target_lines .= "routers.cgi*Icon: windows-sm.gif\n";
} elsif( $sysdescr =~ /IBM/i ) {
$target_lines .= "routers.cgi*Icon: aix-sm.gif\n";
} elsif( $sysdescr =~ /(sun|solaris)/i ) {
$target_lines .= "routers.cgi*Icon: sun-sm.gif\n";
} elsif( $sysdescr =~ /cisco/i ) {
$target_lines .= "routers.cgi*Icon: cisco-sm.gif\n";
}
$target_lines .= &lt;&lt;ECHO;
routers.cgi*Description: $router_name ($sysname)
routers.cgi*ShortDesc: $sysname
#-------------------------------------------------
ECHO

my($cpuoid) = oid_pick($router_connect,$v3opt,"1.3.6.1.4.1.2021.11.11.0",
"1.3.6.1.4.1.9.2.1.58.0");
if($cpuoid) { # this uses the UCD MIB or Cisco MIB
$target_lines .= &lt;&lt;ECHO;
#######################################
# CPU load
Target[$router_name-cpu]: 100 - $cpuoid&amp;$cpuoid:$router_connect
PageTop[$router_name-cpu]: &lt;H1&gt;$router_name CPU usage&lt;/H1&gt;
Title[$router_name-cpu]: CPU on $router_name
Maxbytes[$router_name-cpu]: 100
Options[$router_name-cpu]: gauge
YLegend[$router_name-cpu]: percent
ShortLegend[$router_name-cpu]: %
LegendI[$router_name-cpu]: cpu:
Legend1[$router_name-cpu]: CPU usage
Legend3[$router_name-cpu]: Peak CPU usage
routers.cgi*Options[$router_name-cpu]: noo, nopercent, nototal, fixunit
routers.cgi*InOut[$router_name-cpu]: no
routers.cgi*ShortDesc[$router_name-cpu]:CPU
routers.cgi*Icon[$router_name-cpu]: chip-sm.gif
routers.cgi*InSummary[$router_name-cpu]: yes
routers.cgi*InCompact[$router_name-cpu]: yes
routers.cgi*Mode[$router_name-cpu]: cpu
routers.cgi*MBLegend[$router_name-cpu]: 100% usage
ECHO
} else { # lets try hrMIB
my (@cpus) = snmpwalk($router_connect,'1.3.6.1.2.1.25.3.3.1.2');
foreach my $tmpcpu (@cpus) {
$tmpcpu =~ /(\d+):\d/;
my( $instance )=$1;
my( $target_name )=$router_name.".cpu".$instance;
$target_lines .= &lt;&lt;ECHO;
Target[$target_name]: 1.3.6.1.2.1.25.3.3.1.2.$instance&amp;1.3.6.1.2.1.25.3.3.1.2.$instance:$router_connect
Title[$target_name]: $sysname processor $instance
MaxBytes[$target_name]: 100
Options[$target_name]: gauge, unknaszero, noo
Directory[$target_name]: $directory_name
WithPeak[$target_name]: wmy
YLegend[$target_name]: % Utilisation
ShortLegend[$target_name]: %
Legend1[$target_name]: 1min CPU load on proc$instance
Legend3[$target_name]: Max 5min CPU load on proc$instance
LegendI[$target_name]: cpu$instance:
PageTop[$target_name]: &lt;H1&gt;$sysname Processor Load&lt;/H1&gt;
routers.cgi*ShortDesc[$target_name]: CPU #$instance
routers.cgi*Options[$target_name]: nopercent, nototal, fixunit
routers.cgi*InOut[$target_name]: no
routers.cgi*Icon[$target_name]: chip-sm.gif
routers.cgi*InSummary[$target_name]: yes
routers.cgi*InCompact[$target_name]: yes
routers.cgi*Mode[$target_name]: cpu
routers.cgi*MBLegend[$target_name]: 100% usage
ECHO
if($#cpus &gt; 0) {
$target_lines .= "routers.cgi*Graph[$target_name]: $router_name-allcpu average\n";
$target_lines .= "routers.cgi*InMenu[$target_name]: no\n";
}
}
if($#cpus &gt; 0) {
$target_lines .= &lt;&lt;ECHO;
routers.cgi*Title[$router_name-allcpu]: All CPUs on $router_name
routers.cgi*Icon[$router_name-allcpu]: chip-sm.gif
routers.cgi*ShortDesc[$router_name-allcpu]: CPU
routers.cgi*LegendAI[$router_name-allcpu]: cpu :
ECHO
}
}

my($rmemoid) = oid_pick($router_connect,$v3opt,"1.3.6.1.4.1.2021.4.6.0");
my($smemoid) = oid_pick($router_connect,$v3opt,"1.3.6.1.4.1.2021.4.4.0");
if($rmemoid and $smemoid) { # this uses the UCD MIB
my($maxreal, $maxswap) = snmpget($router_connect,
"1.3.6.1.4.1.2021.4.5.0","1.3.6.1.4.1.2021.4.3.0");
$target_lines .= &lt;&lt;ECHO;
#######################################
# Memory used
Target[$router_name-memory]: $rmemoid&amp;$smemoid:$router_connect * 1024
PageTop[$router_name-memory]: &lt;H1&gt;$router_name Memory Available &lt;/H1&gt;
Title[$router_name-memory]: Available Memory on $router_name
SetEnv[$router_name-memory]: MRTG_INT_DESCR="Memory"
MaxBytes1[$router_name-memory]: $maxreal
MaxBytes2[$router_name-memory]: $maxswap
Options[$router_name-memory]: gauge
YLegend[$router_name-memory]: Bytes
ShortLegend[$router_name-memory]: b
LegendI[$router_name-memory]: real:
LegendO[$router_name-memory]: swap:
Legend1[$router_name-memory]: Available real memory
Legend2[$router_name-memory]: Available swap space
Legend3[$router_name-memory]: Peak available real
Legend4[$router_name-memory]: Peak available swap
routers.cgi*Options[$router_name-memory]: nototal
routers.cgi*Mode[$router_name-memory]: memory
routers.cgi*ShortDesc[$router_name-memory]: Memory
routers.cgi*Description[$router_name-memory]: Memory available: $router_name
routers.cgi*InOut[$router_name-memory]: no
routers.cgi*InSummary[$router_name-memory]: yes
routers.cgi*InCompact[$router_name-memory]: yes
routers.cgi*Icon[$router_name-memory]: chip-sm.gif
routers.cgi*MBLegend[$router_name-memory]: 100% usage
ECHO
}

my (@storage) = snmpwalk($router_connect,'1.3.6.1.2.1.25.2.3.1.4');
my( $fscnt ) = 0;
foreach my $tmps (@storage) {
$tmps =~ /(\d+):(\d+)/;
next if(!$2);
my($instance,$blocksize)=($1,$2);
my($diskname,$disksize,$disktype) =
snmpget($router_connect,'1.3.6.1.2.1.25.2.3.1.3.'.$instance,
'1.3.6.1.2.1.25.2.3.1.5.'.$instance, '1.3.6.1.2.1.25.2.3.1.2.'.$instance);
$disktype = $1 if($disktype =~ /\.(\d+)$/);
next if(!$diskname or !$disksize
or ($disktype!=2 and $disktype!=3 and $disktype!=4));
my($shortdisk) = $instance;
$shortdisk = $1 if($diskname =~ /^(\w):/);
my($target_name)=$router_name.".disk.".$shortdisk;
my($maxsize)= $disksize * $blocksize;

if($disktype == 2 ) { # memory use
next if($rmemoid); # we already have it
$target_lines .= &lt;&lt;ECHO;
#######################################
# Memory used
Target[$router_name-memory]: 1.3.6.1.2.1.25.2.3.1.6.$instance&amp;1.3.6.1.2.1.25.2.3.1.5.$instance:$router_connect * $blocksize
PageTop[$router_name-memory]: &lt;H1&gt;$router_name Memory Used&lt;/H1&gt;
Title[$router_name-memory]: Memory used on $router_name
SetEnv[$router_name-memory]: MRTG_INT_DESCR="Memory"
MaxBytes[$router_name-memory]: $maxsize
Options[$router_name-memory]: gauge
YLegend[$router_name-memory]: Bytes
ShortLegend[$router_name-memory]: b
LegendI[$router_name-memory]: used:
LegendO[$router_name-memory]: size:
Legend1[$router_name-memory]: Memory used
Legend2[$router_name-memory]: Memory total
Legend3[$router_name-memory]: Peak memory used
Legend4[$router_name-memory]: Peak memory total
routers.cgi*Options[$router_name-memory]: nototal noo
routers.cgi*Mode[$router_name-memory]: memory
routers.cgi*ShortDesc[$router_name-memory]: Memory
routers.cgi*Description[$router_name-memory]: Memory used: $router_name
routers.cgi*InOut[$router_name-memory]: no
routers.cgi*InSummary[$router_name-memory]: yes
routers.cgi*InCompact[$router_name-memory]: yes
routers.cgi*Icon[$router_name-memory]: chip-sm.gif
routers.cgi*MBLegend[$router_name-memory]: 100% usage
ECHO
} elsif($disktype == 3 ) { # swap use
next if($smemoid);
$target_lines .= &lt;&lt;ECHO;
#######################################
# Swap used
Target[$router_name-swap]: 1.3.6.1.2.1.25.2.3.1.6.$instance&amp;1.3.6.1.2.1.25.2.3.1.5.$instance:$router_connect * $blocksize
PageTop[$router_name-swap]: &lt;H1&gt;$router_name Swap space used&lt;/H1&gt;
Title[$router_name-swap]: Swap space used on $router_name
SetEnv[$router_name-swap]: MRTG_INT_DESCR="Swap"
MaxBytes[$router_name-swap]: $maxsize
Options[$router_name-swap]: gauge
YLegend[$router_name-swap]: Bytes
ShortLegend[$router_name-swap]: b
LegendI[$router_name-swap]: used:
LegendO[$router_name-swap]: size:
Legend1[$router_name-swap]: Swap space used
Legend2[$router_name-swap]: Swap space total
Legend3[$router_name-swap]: Peak swap used
Legend4[$router_name-swap]: Peak swap total
routers.cgi*Options[$router_name-swap]: nototal noo
routers.cgi*Mode[$router_name-swap]: memory
routers.cgi*ShortDesc[$router_name-swap]: Swap
routers.cgi*Description[$router_name-swap]: Swap space used: $router_name
routers.cgi*InOut[$router_name-swap]: no
routers.cgi*InSummary[$router_name-swap]: yes
routers.cgi*InCompact[$router_name-swap]: yes
routers.cgi*Icon[$router_name-swap]: chip-sm.gif
routers.cgi*MBLegend[$router_name-swap]: 100% usage
ECHO
} elsif($disktype == 4 ) { # filesystems
$fscnt += 1;
$target_lines .= &lt;&lt;ECHO;
#######################################
# Filesystem $diskname
Target[$target_name]: 1.3.6.1.2.1.25.2.3.1.6.$instance&amp;1.3.6.1.2.1.25.2.3.1.6.$instance:$router_connect * $blocksize
PageTop[$target_name]: &lt;H1&gt;$router_name Disk space used ($diskname)&lt;/H1&gt;
Title[$target_name]: Disk space used on $router_name ($diskname)
SetEnv[$target_name]: MRTG_INT_DESCR="$diskname"
MaxBytes[$target_name]: $maxsize
Options[$target_name]: gauge
YLegend[$target_name]: Bytes
ShortLegend[$target_name]: b
LegendI[$target_name]: used:
Legend1[$target_name]: Space used
Legend3[$target_name]: Peak used
routers.cgi*Options[$target_name]: nototal, noo
routers.cgi*Mode[$target_name]: general
routers.cgi*ShortDesc[$target_name]: Disk: $diskname
routers.cgi*Description[$target_name]: $router_name space used on $diskname
routers.cgi*InOut[$target_name]: no
routers.cgi*InMenu[$target_name]: yes
routers.cgi*InSummary[$target_name]: yes
routers.cgi*InCompact[$target_name]: yes
routers.cgi*Icon[$target_name]: dir-sm.gif
routers.cgi*Graph[$target_name]: $router_name-filesystems "Disk space" withtotal noo
ECHO
}
}
if($fscnt) {
$target_lines .= &lt;&lt;ECHO;
routers.cgi*Options[$router_name-filesystems]: available
routers.cgi*Icon[$router_name-filesystems]: dir-sm.gif
routers.cgi*ShortDesc[$router_name-filesystems]: Filesystems
routers.cgi*Title[$router_name-filesystems]: Filesystems on $router_name
ECHO
}

my($laoid) = oid_pick($router_connect,$v3opt,"1.3.6.1.4.1.2021.10.1.5.2");
my($laoid2) = oid_pick($router_connect,$v3opt,"1.3.6.1.4.1.2021.10.1.5.3");
if($laoid and $laoid2) { # this uses the UCD MIB
$target_lines .= &lt;&lt;ECHO;
#######################################
# Load average
Target[$router_name-lavg]: $laoid&amp;$laoid2:$router_connect / 100
PageTop[$router_name-lavg]: &lt;H1&gt;$router_name Load Average&lt;/H1&gt;
Title[$router_name-lavg]: Load Average on $router_name
SetEnv[$router_name-lavg]: MRTG_INT_DESCR="Load Average"
MaxBytes[$router_name-lavg]: 1000
Options[$router_name-lavg]: nopercent, gauge
YLegend[$router_name-lavg]: Processes
ShortLegend[$router_name-lavg]: &amp;nbsp;
LegendI[$router_name-lavg]: 5min avg:
LegendO[$router_name-lavg]: 15min avg:
Legend1[$router_name-lavg]: 5-min load average
Legend2[$router_name-lavg]: 15-min load average
Legend3[$router_name-lavg]: Peak 5-min load average
Legend4[$router_name-lavg]: Peak 15-min load average
routers.cgi*Options[$router_name-lavg]: nomax, nototal, fixunit, noo
routers.cgi*Mode[$router_name-lavg]: general
routers.cgi*ShortDesc[$router_name-lavg]: Load Avg
routers.cgi*Description[$router_name-lavg]: Load average: $router_name
routers.cgi*UnScaled[$router_name-lavg]: none
routers.cgi*WithPeak[$router_name-lavg]: none
routers.cgi*InOut[$router_name-lavg]: no
routers.cgi*InSummary[$router_name-lavg]: yes
routers.cgi*InCompact[$router_name-lavg]: no
routers.cgi*Icon[$router_name-lavg]: load-sm.gif
ECHO
}

my($ucoid) = oid_pick($router_connect,$v3opt,"1.3.6.1.2.1.25.1.5.0");
if($ucoid) {
$target_lines .= &lt;&lt;ECHO;
#######################################
# User count
Target[$router_name-users]: $ucoid&amp;$ucoid:$router_connect
PageTop[$router_name-users]: &lt;H1&gt;$router_name Active users&lt;/H1&gt;
Title[$router_name-users]: Active Users on $router_name
MaxBytes[$router_name-users]: 1000
SetEnv[$router_name-users]: MRTG_INT_DESCR="Users"
Options[$router_name-users]: nopercent, gauge
YLegend[$router_name-users]: Users
ShortLegend[$router_name-users]: &amp;nbsp;
LegendI[$router_name-users]: Users
Legend1[$router_name-users]: Active Users
Legend3[$router_name-users]: Peak Active Users
routers.cgi*Options[$router_name-users]: nomax, nototal, fixunit, noo
routers.cgi*Mode[$router_name-users]: general
routers.cgi*ShortDesc[$router_name-users]: Users
routers.cgi*Description[$router_name-users]: Users on $router_name
routers.cgi*UnScaled[$router_name-users]: none
routers.cgi*InOut[$router_name-users]: no
routers.cgi*InSummary[$router_name-users]: yes
routers.cgi*InCompact[$router_name-users]: no
routers.cgi*Icon[$router_name-users]: user-sm.gif
ECHO
}

my($proid) = oid_pick($router_connect,$v3opt,"1.3.6.1.2.1.25.1.6.0");
if($proid) {
my($maxpr) = snmpget($router_connect, "1.3.6.1.2.1.25.1.7.0");
$target_lines .= &lt;&lt;ECHO;
#######################################
# Process count
Target[$router_name-procs]: $proid&amp;$proid:$router_connect
PageTop[$router_name-procs]: &lt;H1&gt;$router_name Processes&lt;/H1&gt;
Title[$router_name-procs]: Processes on $router_name
ECHO
if($maxpr) {
$target_lines .= "MaxBytes[$router_name-procs]: $maxpr\n";
} else {
$target_lines .= "MaxBytes[$router_name-procs]: 10000\n";
}
$target_lines .=
"routers.cgi*Options[$router_name-procs]: nototal, fixunit, noo"
.($maxpr?"":", nomax")."\n";
$target_lines .= &lt;&lt;ECHO;
SetEnv[$router_name-procs]: MRTG_INT_DESCR="Procs"
Options[$router_name-procs]: nopercent, gauge
YLegend[$router_name-procs]: Processes
ShortLegend[$router_name-procs]: &amp;nbsp;
LegendI[$router_name-procs]: Procs
Legend1[$router_name-procs]: Processes
Legend3[$router_name-procs]: Peak Processes
routers.cgi*Mode[$router_name-procs]: general
routers.cgi*ShortDesc[$router_name-procs]: Processes
routers.cgi*Description[$router_name-procs]: Processes on $router_name
routers.cgi*UnScaled[$router_name-procs]: none
routers.cgi*InOut[$router_name-procs]: no
routers.cgi*InSummary[$router_name-procs]: yes
routers.cgi*InCompact[$router_name-procs]: no
routers.cgi*Icon[$router_name-procs]: list-sm.gif
routers.cgi*MBLegend[$router_name-procs]: Max capacity
ECHO
}



mrtg cfgmaker 팁

시스코 스위치 vlan 값 주석 처리.

cfgmaker 옵션에 '-if-filter=(!$if_is_ciscovlan)' 를 준다.

예제)

[sourcecode]
cfgmaker --global 'WorkDir:/home/mrtg/test/138' --global 'Language:korean' --global 'Options[_]: bits,growright' --output '/home/mrtg/test/cfgmaker/cfg_test4.cfg'  '-if-filter=(!$if_is_ciscovlan)'  커뮤니티@아이피
[/sourcecode]

2012년 9월 21일 금요일

qmHandler 작동 문제

qmHandler 실행시 Calling system script to terminate qmail... 부분에서 더이상 진행이 안되는 현상이 있다.

확인 결과 qmail-remote 가 qmail stop 명령어로는 정지 되지 않는다.

killall qmail-remote 후 실행하자.

2012년 9월 20일 목요일

전화번호 마스크용 스크립트

1. 전화번호 마스크용 스크립트

function MaskPhon( obj ) {

obj.value =  PhonNumStr( obj.value );

}

 

function PhonNumStr( str ){

var RegNotNum  = /[^0-9]/g;

var RegPhonNum = "";

var DataForm   = "";

 

// return blank

if( str == "" || str == null ) return "";

 

// delete not number

str = str.replace(RegNotNum,'');

if( str.length < 4 ) return str;

 

if( str.length > 3 && str.length < 7 ) {

DataForm = "$1-$2";

RegPhonNum = /([0-9]{3})([0-9]+)/;

} else if(str.length == 7 ) {

DataForm = "$1-$2";

RegPhonNum = /([0-9]{3})([0-9]{4})/;

} else if(str.length == 9 ) {

DataForm = "$1-$2-$3";

RegPhonNum = /([0-9]{2})([0-9]{3})([0-9]+)/;

} else if(str.length == 10){

if(str.substring(0,2)=="02"){

DataForm = "$1-$2-$3";

RegPhonNum = /([0-9]{2})([0-9]{4})([0-9]+)/;

}else{

DataForm = "$1-$2-$3";

RegPhonNum = /([0-9]{3})([0-9]{3})([0-9]+)/;

}

} else if(str.length > 10){

DataForm = "$1-$2-$3";

RegPhonNum = /([0-9]{3})([0-9]{4})([0-9]+)/;

}

 

while( RegPhonNum.test(str) ) {

str = str.replace(RegPhonNum, DataForm);

}

return str;

}


 


 

2. 입력박스
전화번호 : <input type='text' maxlength='13' onkeyup ='MaskPhon(this);' onkeydown='MaskPhon(this);'  >

2012년 9월 13일 목요일

Linux - Search and replace over multiple files.

예제.
<link rel="stylesheet" type="text/css" href="../includes/style.css">

위의 코드를 아래처럼 변경 하고 싶을 때.
<link rel="stylesheet" type="text/css" href="admin.css">

 

 

 
perl -pi -w -e 's/\.\.\/includes\/style\.css/admin\.css/g;' *.php

확장자가 php인 파일에서 ../includes/style.css 를 admin.css 로 모든 부분 변경.

 

Linux - Search and replace over multiple files..

2012년 9월 10일 월요일

qmail queue 주기적 정리,삭제 기능.

 


많은 양의 메일이 큐에 쌓일경우 아래와 같이 설정해주시면
매번 큐를 삭제하지 않고도 주기적으로 큐 정리가 가능해집니다.

#touch /var/qmail/control/queuelifetime ->> 파일 생성
 #echo "86400" > /var/qmail/control/queuelifetime       -> 큐 대기시간 하루
/etc/init.d/qmail reload     --> qmail 재로드
/var/qmail/bin/qmail-showctl  | grep life   --> 확인

 

queuelifetime 시간에 따른 재발송 회수

86400은 대략 6회정도.






How often does qmail retry to send email?

 

Each message has its own retry schedule. The longer a message remains undeliverable, the less frequently qmail tries to send it. The retry schedule is not configurable. The following table shows the retry schedule for a message that's undeliverable to a remote recipient until it bounces. Local messages use a similar, but more frequent, schedule.


















































































































































































































Delivery AttemptSecondsD-HH:MM:SS
100-00:00:00
24000-00:06:40
316000-00:26:40
436000-01:00:00
564000-01:46:40
6100000-02:46:40
7144000-04:00:00
8196000-05:26:40
9256000-07:06:40
10324000-09:00:00
11400000-11:06:40
12484000-13:26:40
13576000-16:00:00
14676000-18:46:40
15784000-21:46:40
16900001-01:00:00
171024001-04:26:40
181156001-08:06:40
191296001-12:00:00
201444001-16:06:40
211600001-20:26:40
221764002-01:00:00
231936002-05:46:40
242116002-10:46:40
252304002-16:00:00
262500002-21:26:40
272704003-03:06:40
282916003-09:00:00
293136003-15:06:40
303364003-21:26:40
313600004-04:00:00
323844004-10:46:40
334096004-17:46:40
344356005-01:00:00
354624005-08:26:40
364900005-16:06:40
375184006-00:00:00
385476006-08:06:40
395776006-16:26:40
406084007-01:00:00

2012년 9월 8일 토요일

onmouseover 삭제

 

onmouseover 기능을 해제하려고 unbind,bind,off 기능을 무쟈게 해메이다 알게 됬다.

................

한편, <td onclick=”"> 와 같이 정적으로 onclick이 설정 된것은 unbind()로 해제할수 없는데

이 경우에는 $(‘.td’).removeAttr(“onclick”); 을 사용해서 해제 해야한다.

 

제길~!!!  내 1시간.....

 

출처

2012년 8월 16일 목요일

rename을 이용한 하위 디렉토리 포함 확장자 변경.

아래 명령어는 현재 디렉토리의 하위디렉토리까지 모두

jsp확장자를 모두 php확장자로 변환하는 명령어.

find와 rename을 이용한다.
find . -name "*.jsp" -exec rename .jsp .php {} \;

2012년 8월 10일 금요일

구글 톡 chatback 배지 안되네...


블로그에 구글 토크를 설치하여 방문자와 대화 할 수 있는 서비스인

구글 톡 chatback 배지 서비스가 제대로 동작 하지 않는다.

검색해보니 나만 그런게 아닌듯...

 

2012년 8월 9일 목요일

tmp 해킹툴 삭제 스크립트

서버의 트래픽이 갑자기  100M이상 늘어나는 현상이 있었다.

서버체크를 해보니 /tmp 디렉토리에 숨김파일로 공격툴이 심어져 있고,

다른 쪽으로 공격을 하고 있었다.

일단 해당 프로세스를 죽인후 해당 파일을 삭제처리 하였다.

tmp 해킹에 대해서 검색하여, tmp 디렉토에서는 실행할  수 없게끔 설정하였다.

문제는 /tmp/.hack 이렇게 경로로 실행을 하면 실행 되지 않지만,

sh /tmp/.hack 이런 식으로 주면 실행이 가능하다.

해당 공격툴의 소유자가 nobody 인 걸로 봐서 웹을 통한 해킹인 것으로 보이는 데,

해당 문제는 다른 이유로 만질 수 있는 상태가 아니다.

tmpwatch를 이용해서 /tmp 디렉토리에서 해킹툴을 지속적으로 삭제해주도록 걸어 놨다.

몇일 간 문제가 없어 보였으나 ,  다시 트래픽이 쳐서 확인 해 보았다.

공격툴이 정상적으로 삭제 되어졌으나 문제는 메모리에 이미 로드 되어 실행이 되고 있는 상태인 것 같다.

프로세스를 확인 하면 [sh] <defunct> 이렇게 나오는 부분이 있는 데, 역시나 삭제된 해킹툴이다.

해서 /tmp 디렉토리에서 실행되는 프로그램은 죽여버리고, 삭제 시키는 스크립트를 만들었다.

----------------
#/bin/sh

while (( 1 ))
do

for f in `find /tmp/ -type f | grep -v "sess_*"`
do

if [ "$f" != "." ] && [ "$f" != ".." ] && [ "$f" != ".ICE-unix" ] && [ "$f" != ".font-unix" ]
then
if [ -e $f ]
then

#echo $f' is file'
lsof $f | sed '1d' | awk '{print $2}' | xargs kill -9
rm -rf $f
fi
fi

done
sleep 5
done

해당 프로그램을 실행하면 5초 마다 실행 되도록 작성 해 놓았다.

부하는 그리 크지 않는 듯 하나, 루프를 돌리기 싫다면, while 부분을 삭제하고 크론으로 등록하여 사용해도 좋을 듯하다.

윈도우 2008에서 Windows Defender 설치

윈도우 서버의 기본 보안 프로그램인 Windows Defender를 설치해서 사용할 수 있다.

윈도우2008부터는 Windows Defender가 기본으로 제공되므로 따로 설치할 필요가 없다.

근데 어디에서도 Windows Defender를 찾을 수가 없다.

따로 설치 파일을 받아서 설치하려고 해도 이미 설치되어 있다고 하며 설치가 안된다.

서버관리자에서 기능추가에서 데스크탑 경험을 설치하면 된다.

 

http://linhost.info/2009/05/ask-the-admin-how-do-i-install-windows-defender-on-windows-server-2008/

logparser를 이용한 mssql sa 공격 차단하기

sqler.com에서 '이벤트 뷰어 sa 로그인 시도 ip차단 시키는 방법.'를 보고 만들었다.

sqler.com에 있는 배치파일이 제대로 작동 되면 그냥 썼으면 좋았으련만...

이것저것 다 적용하려고 하니 너무 방대해 지는 것 같아서 그냥 사용하려고 한다.

logparser가 기본적으로 깔려있어야 실행 된다.

안에 내용물은 배치파일 3개, sql문 1개인데

배치파일은 그냥 만들던거 집어넣은 거고, v3버젼을 사용하면 된다.

sql파일은 mssql 사용포트를 자동으로 가져오려고 하다보니 집어 넣게 됬다.

sa_attack_deny
@echo off
REM @echo on
REM @echo off 화면에 출력되지 않게 함
CLS

REM #########################
REM blog.netchk.com
REM #########################

REM 자동으로 체크 하도록 변경.
REM #############################################설정정보
REM sql 사용 포트
REM SET sql_port=1433
REM logParser 경로. \를 붙여서 넣어야 함
REM SET logParser="%ProgramFiles%\Log Parser 2.2\LogParser.exe"
REM os 버젼 2003 이면 1, 2008이면 2
REM SET os_version=2003
REM #############################################

:start

REM ################################# 언어 확인 START
set Key="HKEY_CURRENT_USER\Control Panel\International"
for /F "tokens=3" %%a in ('reg query %Key% ^| find /i "sLang"') do set os_lang=%%a
REM echo Language is %os_lang%
REM KOR 이라고 나옴.

IF /I %os_lang% == KOR (
SET findName=이름
SET query_type=클라이언트:
) else (
SET findName=Name
SET query_type=client:
)
REM ################################# 언어 확인 END

REM ################################# sql port 확인 START
IF NOT EXIST PORT.sql (
echo port.sql 파일이 없습니다.
ECHO mssql 포트 번호를 확인 할 수 없습니다.
GOTO exit
)
for /f "tokens=3 delims=:" %%i in ('sqlcmd -S . -i PORT.sql') do set sql_port=%%i
REM echo %sql_port%
REM ################################# sql port 확인 END

REM ################################# 32,64bit 확인하고 programFiles 위치 체크 START
if "%ProgramFiles(x86)%XXX"=="XXX" (
REM echo 32-bit
set flatform=32
set ProgRoot="%ProgramFiles%"
) else (
set ProgRoot="%ProgramFiles(x86)%"
set flatform=64
)
for /f "delims=" %%a in (%ProgRoot%) do set ProgRoot=%%~a
REM echo %ProgRoot%
set logParser="%ProgRoot%\Log Parser 2.2\LogParser.exe"
REM ################################# 32,64bit 확인하고 programFiles 위치 체크 END

REM ################################# log parser 확인 START
ECHO.
echo log parser 가 설치되었는지 확인합니다.
if not exist %logParser% (
echo logParser가 설치되어 있지 않거나 경로가 틀립니다.
echo Log Parser 설정된 경로 : %logParser%
echo http://www.microsoft.com/en-us/download/details.aspx?id=24659
pause
goto exit
) else (
echo 설치확인.
)
REM ################################# log parser 확인 END

ECHO.
echo wevtutil 프로그램이 있는 지 확인합니다.
if exist %SystemRoot%\system32\wevtutil.exe (
echo wevtutil 확인.
) else (
echo 이벤트 로그를 삭제 하기 위해서는 wevtutil 이 필요합니다.
echo 이벤트 로그를 삭제 하지 않고 진행합니다.
timeout /t 2 /nobreak

)

echo system 확인 결과 입니다.
echo OS Language : %os_lang%
REM echo OS version : %os_version%
echo OS platform : %flatform%
echo mssql port : %sql_port%

:start_ip_sec
echo ---------------------------에러 메시지 설명 ------------------------------
echo 1. ... 필터 목록이 이미 있습니다.라는 메시지는 정상입니다.
echo.
echo 2. 파일 temp.txt을(를) 찾을 수 없습니다. 라는 메시지는
echo 새로운 공격로그가 없을 경우 나타납니다.
echo.
echo 3. 이름이 '3'인 규칙이 정책 ...생략... 이미 있습니다. 메시지 역시 정상입니다.
echo --------------------------------------------------------------------------------
echo.

timeout /t 5 /nobreak
ECHO.

REM 차단 시작
echo.
echo 아이피 차단을를 진행합니다.
echo.
echo.

REM 로컬룰지정
netsh ipsec static set store location=local

REM 최초 룰정책 생성
netsh ipsec static add policy name=sql_sa_attack_ip_deny_list description="이벤트로그를 이용한 sa 공격시도 아이피 차단--blog.netchk.com NDH" assign=yes

REM 필터리스트 추가
netsh ipsec static add filterlist name=ip_deny
netsh ipsec static add filterlist name=Local

REM 허용/거부룰 설정
netsh ipsec static add filteraction name=Permit action=Permit
netsh ipsec static add filteraction name=Block action=Block

echo.
echo.

REM 이벤트로그 중 sql sa 계정 공격 아이피만 가져오는 쿼리. temp.txt로 생성
REM

%logParser% -i:evt -o:nat -q:on "SELECT DISTINCT TRIM(EXTRACT_TOKEN(EXTRACT_TOKEN(Strings,1,'%query_type%'),0,']')) AS ip INTO temp.txt FROM application WHERE EventID='18456' AND Strings LIKE '%%sa%%'"

REM temp.txt 저장된 정보를 라인단위로 읽어 'ip_deny' 이름으로 작성된 netsh ipsec에 등록하기 위해 event_netsh ipsec_deny.bat 파일로 만든다 or 실행.
REM /f 옵션 : 파일을 읽어드림

REM bat 파일로 만듬
REM for /f %%i in (temp.txt) do @echo netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%>>reg_netsh ipsec_deny.bat
REM 바로 실행
for /f %%i in (temp.txt) do netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%

REM temp.txt 삭제
del /q temp.txt

echo.
echo.

REM 로컬트래픽허용
netsh ipsec static add filter filterlist=Local srcaddr=me dstaddr=localhost dstmask=255.255.255.0 protocol=ANY mirrored=yes

REM 필터룰 추가
netsh ipsec static add rule name=3 policy=sql_sa_attack_ip_deny_list filter=ip_deny filteraction=Block
netsh ipsec static add rule name=1 policy=sql_sa_attack_ip_deny_list filter=Local filteraction=Permit

REM 차단 끝

:del_app_evt
REM wevtutil 있어야 함.이벤트로그 삭제
REM wevtutil cl application

pause
goto exit

:exit
CLS
echo 프로그램을 종료합니다.
pause

ps.만든지  일주일 정도 지났는 데, 파워쉘로 더 간단하고 logparser 설치 할 필요도 없이 만들 수 있다는 걸 알게 됬다..;

2012년 7월 25일 수요일

2012년 7월 14일 토요일

ORA-00845: MEMORY_TARGET not supported on this system

vi

tmpfs                   /dev/shm                tmpfs   defaults,size=4g        0 0

 

 

 

 

 

 

출처:http://h391106.tistory.com/243

2012년 7월 5일 목요일

vnc 접속시 빈화면 나오는 현상

 

 

결론 부터 말하면 gnome 이나 kde 가 설치 되지 않아서 이다.

centos 를 한글로 설치하면
yum grouplist를 치면 아래 처럼 한글로 나온다.

groupinstall도 역시 한글로 입력해야 제대로 설치가 된다.


yum groupinstall '데스크탑' << gnome 설치


[root@localhost .vnc]# yum grouplist
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
* base: data.nicehosting.co.kr
* extras: data.nicehosting.co.kr
* updates: data.nicehosting.co.kr
Installed Groups:
NFS 파일 서버
Perl 지원
X Window 시스템
거대 시스템 성능
과학기술 지원
그래픽기반 관리 도구
기본
네트워크 파일 시스템 클라이언트
네트워킹 도구
데스크탑 플랫폼
디렉터리 클라이언트
디버깅 도구
레거시 X Windows 시스템 호환성
레거시 유닉스 호환성
범용 데스크탑
서버 플랫폼
성능 도구
원격 데스크탑 클라이언트
웹 서블렛 엔진
이메일 서버
자바 플랫폼
추가 개발
콘솔 인터넷 도구
폰트
하드웨어 모니터링 도구
Installed Language Groups:
라오어 지원 [lo]
아랍어 지원 [ar]
아르메니아어 지원 [hy]
이누이트어 지원 [iu]
일본어 지원 [ja]
조지아어 지원 [ka]
타지크어 지원 [tg]
한국어 지원 [ko]
히브리어 지원 [he]
Available Groups:
CIFS 파일 서버
Eclipse
FCoE 저장소 클라이언트
FTP 서버
Identity Management Server
Infiniband 지원
KDE 데스크탑
MySQL 데이터베이스 서버
MySQL 데이터베이스 클라이언트
PHP 지원
PostgreSQL 데이터베이스 서버
PostgreSQL 데이터베이스 클라이언트
Ruby Support
SNMP 지원
TeX 지원
TurboGears 어플리케이션 프레임워크
iSCSI 저장소 클라이언트
가상화
가상화 도구
가상화 클라이언트
가상화 플랫폼
개발용 도구
고가용성
고가용성 관리
그래픽 생성 도구
기술 저작
내결함성 스토리지
네트워크 인프라스트럭쳐 서버
네트워크 저장소 서버
데스크탑
데스크탑 디버깅과 성능 도구
데스크탑 플랫폼 개발
디렉터리 서버
로드 밸런싱
메시지 클라이언트 지원
메인프레임 억세스
백업 서버
백업 클라이언트
보안 도구
서버 플랫폼 개발
소말리아어 지원
스마트카드 지원
시스템 관리
시스템 관리 도구
시스템 관리 메세지 서버 지원
오피스 스위트/생산성
웹 서버
웹기반 엔터프라이즈 관리
이맥스
인쇄 서버
인쇄 클라이언트
인터넷 브라우저
인터넷 프로그램
입력 방식
저장소 가용성 도구
전화연결 네트워킹 지원
클라이언트 관리 도구
호환성 라이브러리
Available Language Groups:
Xhosa 지원 [xh]
갈리시아어 지원 [gl]
게일어 지원 [gd]
고지 소르비아어 지원 [hsb]
구자라티어 지원 [gu]
그리스어 지원 [el]
네델란드어 지원 [nl]
네팔어 지원 [ne]
노르웨이어 지원 [nb]
덴마크어 지원 [da]
독일어 지원 [de]
라트비아어 지원 [lv]
라틴어 지원 [la]
러시아어 지원 [ru]
루마니아어 지원 [ro]
룩셈부르크어 지원 [lb]
르완다어 지원 [rw]
리투아니아어 지원 [lt]
마라티어 지원 [mr]
마오리어 지원 [mi]
마이틸리어 지원 [mai]
마케도니아어 지원 [mk]
말라가시어 지원 [mg]
말라얄람어 지원 [ml]
말레이어 지원 [ms]
맹크스어 지원 [gv]
몰타어 지원 [mt]
몽골어 지원 [mn]
미얀마어(버마어) 지원 [my]
바스크어 지원 [eu]
베트남어 지원 [vi]
벤다어 지원 [ve]
벨로루시어 지원 [be]
벵골어 지원 [bn]
부탄어 지원 [dz]
불가리아어 지원 [bg]
브라질 포르투갈어 지원 [pt_BR]
브르타뉴어 지원 [br]
사르데냐어 지원 [sc]
산스크리트어 지원 [sa]
세르비아어 지원 [sr]
소토어(남) 지원 [st]
소토어(북) 지원 [nso]
스와티어 지원 [ss]
스와힐리어 지원 [sw]
스웨덴어 지원 [sv]
스페인어 지원 [es]
슬로바키아어 지원 [sk]
슬로베이아어 지원 [sl]
신드어 지원 [sd]
신할라어 지원 [si]
아마지그어 지원 [ber]
아삼어 지원 [as]
아이슬란드어 지원 [is]
아일랜드어 지원 [ga]
아제르바이잔어 지원 [az]
아프리칸스어 지원 [af]
알바니아어 지원 [sq]
에스토니아어 지원 [et]
에스페란토어 지원 [eo]
에티오피아어 지원 [am]
영어(영국) 지원 [en_GB]
오리야어 지원 [or]
오크어 지원 [oc]
왈론어 지원 [wa]
우르두어 지원 [ur]
우즈벡어 지원 [uz]
우크라이나어 지원 [uk]
웨일즈어 지원 [cy]
은데벨레어(남) 지원 [nr]
이탈리아어 지원 [it]
인도네시아어 지원 [id]
인테르링구아 지원 [ia]
저지 섹슨어 지원 [nds]
줄루어 지원 [zu]
중국어 지원 [zh]
차티스가리어 지원 [hne]
체코어 지원 [cs]
총가어 지원 [ts]
츠와나어 지원 [tn]
치체와어 지원 [ny]
카슈미르어 지원 [ks]
카슈브어 지원 [csb]
카자흐어 지원 [kk]
카탈로니아어 지원 [ca]
칸나다어 지원 [kn]
콘칸어 지원 [kok]
콥틱어 지원 [cop]
쿠르드어 지원 [ku]
크로아티아어 지원 [hr]
크메르어 지원 [km]
타갈로그어 지원 [tl]
타밀어 지원 [ta]
태국어 지원 [th]
터키어 지원 [tr]
테툼어 지원 [tet]
텔루구어 지원 [te]
투르크멘어 지원 [tk]
티벳어 지원 [bo]
펀잡어 지원 [pa]
페로스어 지원 [fo]
페르시아어 지원 [fa]
포르투갈어 지원 [pt]
폴란드어 지원 [pl]
프랑스어 지원 [fr]
프리울리안어 지원 [fur]
프리지아어 지원 [fy]
피지어 지원 [fj]
핀란드어 지원 [fi]
필리핀어 지원 [fil]
헝가리아어 지원 [hu]
힌두어 지원 [hi]
힐리가이노어 지원 [hil]
Done

 

 



 

 

 

2012년 7월 3일 화요일

asp vs php 비교

 

 













































































































































































ASP (VBScript)



PHP (v4.3+)


General syntax
ASP Comments, inline
'my dog has fleas
PHP Comments, inline
//my dog has fleas
ASP Comments, block

not available?
PHP Comments, block
/*
The quick brown fox
jumped over the lazy dogs.
*/
ASP, Escaping quotes
"""var text1=""<img src=\""blank.gif\"">"";"

PHP, Escaping quotes
\" or use ' like javascript'var text1="<img src=\"blank.gif\">";';

ASP Command termination
None, but : can be used to separate commands
on the same line.
PHP Command termination
Each command must end with ; but
multiple commands per line are allowed.
ASP Screen output
response.write "hello"
PHP Screen output
echo "hello";
ASP Newline characters
vbCrLfresponse.write "hello" & vbCrLf

PHP Newline characters
"\n" (must be inside "", not '')echo "hello \n";

ASP Variable Names
Not case sensitive,
so fName is the same as FNAME
PHP Variable Names
Case sensitive AND must begin with $
so $fName is NOT the same as $FNAME
String Functions
ASP String concatenation
&fname=name1 & " " & name2
emsg=emsg & "error!"

PHP String concatenation
. and .=$fname=$name1." ".$name2;
$emsg.="error!";

ASP, Change case
LCase(), UCase()lowerName=LCase(chatName)
upperName=UCase(chatName)

PHP, Change case
strtolower(), strtoupper()$lowerName=strtolower($chatName);
$upperName=strtoupper($chatName);

ASP String length
Len()n=Len(chatName)

PHP String length
strlen()$n=strlen($chatName);

ASP, Trim whitespace
Trim()temp=Trim(xpage)

PHP, Trim whitespace
trim() and also ltrim(), rtrim()$temp=trim($xpage);

ASP String sections

Left(), Right(), Mid()

Left("abcdef",3) result = "abc"
Right("abcdef",2) result = "ef"
Mid("abcdef",3) result = "cdef"
Mid("abcdef",2,4) result = "bcde"

PHP String sections

substr()

substr("abcdef",0,3); result = "abc"
substr("abcdef",-2); result = "ef"
substr("abcdef",2); result = "cdef"
substr("abcdef",1,4); result = "bcde"

ASP String search forward, reverse

Instr(), InstrRev()

x=Instr("abcdef","de") x=4
x=InstrRev("alabama","a") x=7

PHP String search forward, reverse

strpos(), strrpos()

$x=strpos("abcdef","de"); x=3
$x=strrpos("alabama","a"); x=6

ASP String replace
Replace(string exp,search,replace)temp=Replace(temp,"orange","apple")
temp=Replace(temp,"'","\'")
temp=Replace(temp,"""","\""")

PHP String replace
str_replace(search,replace,string exp)$temp=str_replace("orange","apple",$temp); $temp=str_replace("'","\\'",$temp);
$temp=str_replace("\"","\\\"",$temp);

ASP, split a string into an array

Split()

temp="cows,horses,chickens"
farm=Split(temp,",",-1,1)
x=farm(0)

PHP, split a string into an array

explode()

$temp="cows,horses,chickens";
$farm=explode(",",$temp);
$x=$farm[0];

ASP, convert ASCII to String
x=Chr(65) x="A"
PHP, convert ASCII to String
$x=chr(65); x="A"
ASP, convert String to ASCII
x=Asc("A") x=65
PHP, convert String to ASCII
$x=ord("A") x=65
Control Structures
ASP, if statements

if x=100 then
x=x+5
elseif x<200 then
x=x+2
else
x=x+1
end if

PHP, if statements

if ($x==100) {
$x=$x+5;
}
else if ($x<200) {
$x=$x+2;
}
else {
$x++;
}

ASP, for loops

for x=0 to 100 step 2
if x>p then exit for
next

PHP, for loops

for ($x=0; $x<=100; $x+=2) {
if ($x>$p) {break;}
}

ASP, while loops

do while x<100
x=x+1
if x>p then exit do
loop

PHP, while loops

while ($x<100) {
$x++;
if ($x>$p) {break;}
}

ASP, branching

select case chartName
case "TopSales"
theTitle="Best Sellers"
theClass="S"
case "TopSingles"
theTitle="Singles Chart"
theClass="S"
case "TopAlbums"
theTitle="Album Chart"
theClass="A"
case else
theTitle="Not Found"
end select

PHP, branching

switch ($chartName) {
case "TopSales":
$theTitle="Best Sellers"; $theClass="S";
break;
case "TopSingles":
$theTitle="Singles Chart"; $theClass="S";
break;
case "TopAlbums":
$theTitle="Album Chart"; $theClass="A";
break;
default:
$theTitle="Not Found";
}

ASP functions

Function myFunction(x)
myFunction = x*16 'Return value
End Function

PHP functions

function myFunction($x) {
return $x*16; //Return value
}

HTTP Environment
ASP, Server variables

Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("HTTP_USER_AGENT")
Request.ServerVariables("REMOTE_ADDR")
Request.ServerVariables("HTTP_REFERER")

PHP, Server variables

$_SERVER["HTTP_HOST"];
$_SERVER["PHP_SELF"];
$_SERVER["HTTP_USER_AGENT"];
$_SERVER["REMOTE_ADDR"];
@$_SERVER["HTTP_REFERER"]; @ = ignore errors

ASP Page redirects
Response.redirect("wrong_link.htm")
PHP Page redirects
header("Location: wrong_link.htm");
ASP, GET and POST variables
Request.QueryString("chat")
Request.Form("username")
PHP, GET and POST variables
@$_GET["chat"];       @ = ignore errors
@$_POST["username"];
ASP, prevent page caching
Response.CacheControl="no-cache"
Response.AddHeader "pragma","no-cache"
PHP, prevent page caching
header("Cache-Control: no-store, no-cache");
header("Pragma: no-cache");
ASP, Limit script execution time, in seconds
Server.ScriptTimeout(240)
PHP, Limit script execution time, in seconds
set_time_limit(240);
ASP, Timing script execution

s_t=timer 

...ASP script to be timed...

duration=timer-s_t
response.write duration &" seconds"

PHP, Timing script execution

$s_t=microtime();

...PHP script to be timed...

$duration=microtime_diff($s_t,microtime());
$duration=sprintf("%0.3f",$duration);
echo $duration." seconds";

//required function
function microtime_diff($a,$b) {
list($a_dec,$a_sec)=explode(" ",$a);
list($b_dec,$b_sec)=explode(" ",$b);
return $b_sec-$a_sec+$b_dec-$a_dec;
}

File System Functions
ASP, create a file system object (second line is wrapped)
'Required for all file system functions
fileObj=Server.CreateObject
("Scripting.FileSystemObject")
PHP, create a file system object
Not necessary in PHP
ASP, check if a file exists
pFile="data.txt"
fileObj.FileExists(Server.MapPath(pFile))
PHP, check if a file exists
$pFile="data.txt";
file_exists($pFile);
ASP, Read a text file

pFile="data.txt"
xPage=fileObj.GetFile(Server.MapPath(pFile))
xSize=xPage.Size 'Get size of file in bytes

xPage=fileObj.OpenTextFile(Server.MapPath(pFile))
temp=xPage.Read(xSize) 'Read file
linkPage.Close

PHP, Read a text file

$pFile="data.txt";
$temp=file_get_contents($pFile); //Read file

Time and Date Functions
ASP, Server Time or Date
Now, Date, Time
PHP, Server Time or Date
date()
ASP, Date format (default)
Now = 7/2/2012 4:21:51 AM
Date = 7/2/2012
Time = 4:21:51 AM
Various ASP functions extract date parts:

Month(Date) = 7
MonthName(Month(Date)) = July
Day(Date) = 2
WeekdayName(Weekday(Date)) = Monday
WeekdayName(Weekday(Date),False) = Mon

PHP, Date format
There is no default format in PHP.
The date() function is formatted using codes:
date("n/j/Y g:i:s A") = 7/2/2012 4:21:51 AM

date("n") = 7
date("F") = July
date("j") = 2
date("l") = Monday
date("D") = Mon

Numeric Functions
ASP, convert decimal to integer
Int()n=Int(x)

PHP, convert decimal to integer
floor()$n=floor($x);

ASP, determine if a value is numeric
IsNumeric()if IsNumeric(n) then ...

PHP, determine if a value is numeric
is_numeric()if (is_numeric($num)) {...}

ASP, modulus function
x mod y
PHP, modulus function
$x % $y

 

http://www.design215.com/toolbox/asp.php

 

 

2012년 6월 28일 목요일

ssh 프로세스 우선순위 높이기

가끔 서버의 접속이 안되는 경우가 있다.

메모리 부족으로 스왑을 사용하는 경우 매우 느려져, 결국은 재부팅을 할 수 밖에 없는 상황이 온다.

이럴때 ssh 만 접속 된다면 해당 프로세스를 죽여서 재부팅이 필요하지 않을 듯 하다.

 

~/.ssh/rc 파일을 만들고 이렇게 넣어준다.
ps -o pid -C sshd --no-heading | xargs renice 19 > /dev/null

 

rc 파일이 뭐냐면 ssh 접속하면 해당 내용을 실행하는 파일이다.

ssh의 우선순위를 최고로 변경.

http://www.davidgrant.ca/starting_sshd_with_a_higher_nice_value
ps. 문제 발생. ssh 를 이용한 rsync 동기화시

rsync : protocol version mismatch -- is your shell clean? 에러 발생

주석처리하고 /etc/profile에 넣음.

원 글에서는 cron에 넣으라고 나온다. /etc/profile도 문제 발생하면 그냥 cron에 등록...

 

 

 

 

 

 

 

2012년 6월 15일 금요일

windows XP 이상에서 특정 포트 사용 프로세스 확인 command

windows XP 이상에서 특정 포트 사용 프로세스 확인 command

==========================================
netstat -naob

==========================================

; 1234 사용 포트 PID 확인
C:\>netstat -ano | find "1234"

TCP 0.0.0:4899 0.0.0.0:0 LISTENING 567

; 567 PID 프로세스명 확인
C:\>tasklist /FI "PID eq 567"
이미지 이름 PID 세션 이름 세션# 메모리 사용
=========== === ========= ===== ===========
process.exe 567 Console  0 4,700 K

※ windows 2000 server에서는 tlist 명령 사용

; 1234 포트 사용 프로세스 kill
C:\> for /f "tokens=5" %p in (' netstat -ano ^| find ":1234" ') do taskkill /F /PID %p

; 1234 포트 사용 프로세스 확인
C:\> for /f "tokens=5" %p in (' netstat -ano ^| find ":1234" ') do tasklist /FI "PID eq %p"

2012년 6월 5일 화요일

마이피플 API 로 메세지 보내기

마이피플의 API 를 통해 웹에서 메시지를 전송가능 하단걸 알았다.

라인은 API 가 없는 거 같고, 카톡은 일반 웹에서는 안되고, 모바일 웹에서만 된다는 점에서 일반웹에서는 사용할 수 없다.

마이피플도 정상적인 API가 아니라 마이피플 위젯을 이용한 꼼수(?)라고 봐야 될 거 같다.

만들려고 보니 이미 만드신 분이 있었다. 역시~

http://www.phpwork.kr/Downloads/viewDownloadDetail/0/1/33

자체 개발 하신 Spac 프레임워크 란 걸 사용 해야 하는 단점이 있다.

해당 프레임 워크 를 사용 안해도 된다고 하셨는데, 그럼 오류 난다.

소소는 아래와 같은데,  아래 처럼 바꿔서 사용 가능 하다.

보니까 워낙 간단한 내용이라서, 함수로 만들어서 사용하는 게 나을 듯 하다.

귀찮아서 그냥 씀.


ps. 위젯 서비스가 종료... 안됨..

jquery sortable 사용법


<script type="text/javascript">
$(document).ready(function() {
$("#table_sortable tbody.content").sortable({
update: function() {
$('input[name="members[]"]').each( function(index,elem) { //인덱스
$('#table_sortable tbody.content tr:eq('+ index +') td input:eq(3)').val(index); //타겟
});

}
});

});
</script>


테이블단위의 sortable은 위와 같이 tbody를 사용한다.

update: 는 이동 완료했을 시 시작.

위의 코드는 테이블을 이동했을 시, members[] 를 읽어들어가며 타겟의 값을 index 값으로 순서대로 변경 해주는 코드

순서를 옮기면 타겟값에 무조건 위에서 부터 0,1,2,3,4,5 이렇게 들어감.




최신 버젼에서는 안됨.


2012년 6월 4일 월요일

웹표준 플래시 삽입

            <object type="application/x-shockwave-flash" data="파일경로" width="980" height="95" > 
<param value="파일경로" name="movie" />
<param value="high" name="quality" />
<param value="transparent" name="wmode" />
<param value=" " name="flashVars" />
<param value="always" name="allowScriptAccess" />
</object>


웹표준 플래시 삽입


출처:http://blog.daum.net/_blog/BlogTypeView.do?blogid=05mzE&articleno=16157018#ajax_history_home

2012년 5월 26일 토요일

속성 셀렉터 표현

jquery 의 속성 셀렉터 사용시

$('a[ref=nofollow self]') 의 책에서 표현식이 사용가능 하다고 나와 있는 데, 최신 버젼이라서 그런지 안됨.

$('a[ref="nofollow self"]') 이런식으로 큰 따옴표와 작은 따옴표를 섞어 쓰던지

$('a[ref=\'nofollow self\']') 역슬래시로 처리 해줘야 됨.

2012년 4월 13일 금요일

콘솔에서 html 메일보내기

리눅스에서 mail 명령어로 이메일을 html 형식으로 보내려고 시도 했으나, mail 명령은 MIME 타입을

변경할 수가 없는 것 같다.

계속 검색하다가 mail 명령은 아니지만 콘솔상태에서 html 형식으로 메일을 보내는 방법을 찾았다.

mail 명령어가 아니라 sendmail 명령어를 이용하는 것이다.

일단 test.html로 html 파일을 만든다.

그리고 맨 상위에 Content-Type을 html로 적어 넣는다.

# cat test.html

To: address@example.com
Subject: Subject
Content-Type: text/html; charset="euc-kr"
<html>
<head>
<title>
hi
</title>
</head>
<body>
hi
it's test
</body>
</html>

위의 파일을 아래의 명령어로 보낸다.
/usr/sbin/sendmail address@example.com < test.html

출처:http://www.liamdelahunty.com/tips/linux_send_html_email_from_command_line.php

메모리 확장, 인식, 분류.



 

사진 출처 : http://2proo.net/470

 

 

우리가 관여할 곳은 주기억장치(DRAM)이다.

메모리 구분은 위의 사진을 보면 알 수 있겠지만, 기술분류와 장착형태만 확인 하면 된다.

 

스피드(클럭) 만으로 대충 구별이 가능 한것 같다.

 




























 타입 모듈 이름동작속도 핀
 DDRpc-1600pc-2100pc-2700

pc-3200

pc-4200
200MHz266MHz333MHz

400MHz

533MHz
184핀.메모리클럭 과 입출력 버스 클럭이 동작속도와 동일.
 DDR2PC2-3200PC2-4200PC2-5300

PC2-6400

PC2 8500
400MHz533MHz667MHz

800MHz

1.066GHz
240핀입출력 버스 클럭은 메모리 클럭의 2배.동작속도는 입출력버스클럭의 2배.
 DDR3PC3-6400PC3-8500PC3-10600

PC3-10666

PC3-12800

PC3-14400

PC3-15000
800MHz1.066GHz1.333GHz

1.333GHz

1.600GHz

1.800GHz

1.866GHz
240핀. (DDR2와 호환 안됨)입출력 버스 클럭은 메모리 클럭의 4배.동작속도는 입출력버스클럭의 2배.

 


자세한 사항은 위키피디아 참조.

http://ko.wikipedia.org/wiki/DDR_SDRAM

http://ko.wikipedia.org/wiki/DDR2_SDRAM

http://ko.wikipedia.org/wiki/DDR3_SDRAM

 

 

ECC(Error Correction Code) 기능을 가지고 있다면 서버용 메모리.



 

사진 출처: http://blog.naver.com/PostView.nhn?blogId=sba47&logNo=140043802847&viewDate=&currentPage=1&listtype=0&userTopListOpen=false&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=undefined

 

그 외에도 RDIMM 인지 UDIMM인지 확인한다.
RDIMM 이 Registered Dual In-line Memory Module 
UDIMM 가 Unbuffered Dual In-line Memory Module

두개 타입을 같이 쓰면 호환이 안됨.

 

 

 

 

ps.

  1. 위의 형식을 따라도 제대로 메모리가 인식 안되는 경우가 종종 있다. 최선은 보드명을 알아내어 보드와 호환되는 메모리를 알아보는 게 가장 나은 방법인것 같다.

  2. 메모리타이밍(CL)은 다른 것을 써도 느린것으로 맞춰지는 걸로 알고 있는데,  안되는 경우도 있는 듯 하다.


 

 

 

참고 사이트

  1. http://ask.nate.com/qna/view.html?n=4831088

  2. http://youandi7.blogspot.com/2009/12/pc%EC%9A%A9-%EB%9E%A8-%EA%B5%AC%EB%B3%84%EB%B2%95.html

  3. http://smsinfo.tistory.com/455


 

2012년 4월 10일 화요일

KT 아이폰 서비스 안됨.

여기에 나오는 방법을 전부 다 동원 해 봤는 데, 안됨.

대리점 가서 USIM 만원주고 바꾸고 해도 안됨.

애플 센터 가서 공장초기화 해도 안됨.

이상한 건 다른 USIM 꽂으면 됨.

내 유심을 잘 되는 다른 폰에 꽂으면 안됨.

콜센터에 전화했더니, USIM 바꾸라고 드립.

약간의 지랄(?) 했더니, 확인 하고 전화 준다고 함.

다시 전화 온 내용은 무슨 전산에 내 기록이 없다고 함. ( 이건 뭔 소리?)

만 하루(이틀)만에 복구 됨.

 

다음날 KT에 전화 해서 이틀동안 안 된 거 어떻게 할 거냐 했더니,

무료통화 넣어줄려고 하는 거임.

전화 별로 안 써서 필요없다고 함.

I-value  55,000원 나누기 31 해서 약  3,500원 깎아준다고 함.

유심비는 어쩔거냐 했더니  5,500 더 깎아 준다고 함.

대리점에서 만원 냈다고 했더니 확인 하고 전화 준다고 함.(대리점 이넘들이 5,500원 인거 만원 받은 거 같음)

확인하고 13,500원 다음 달에 깎아 준다고 함.(여기서 잘 못 했음. 손해배상은 어떻게 할 거냐 , 따졌어야 되는데...)

 

결론. 설마설마 했는 데, 역시나...

2012년 4월 6일 금요일

qmail rbl 적용

회원가입 안 하고 무료로 사용가능 한 것만 적용.


[root@mail smtpd]# cat /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILQUEUE="/var/HMAIL/Core/hanbiroServer"
export QMAILQUEUE

export MALLOC_CHECK_=0
Q_UID=`id -u vpopmail`
Q_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 10000000 \
/usr/local/bin/tcpserver -v -H -R -l0 -c200 -x /etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /usr/local/bin/rblsmtpd -t 30 -b -r bl.spamcop.net \
-r spamlist.or.kr \
-r dnsbl.sorbs.net \
/var/qmail/bin/qmail-smtpd $HOSTNAME \
/home/vpopmail/bin/vchkpw /bin/true 2>&1

2012년 3월 28일 수요일

서버 개체 오류 'ASP 0177 : 800401f3' abcupload 에러

윈도우 2008 64bit 에서 abcupload를 사용하는 데,

아래와 같은 문제가 생겼다.

검색해서 나오는 모든 방법을 총 동원 했지만 실패했다.

 
서버 개체 오류 'ASP 0177 : 800401f3' 

Server.CreateObject 실패

/Examples/basicupload.asp, 줄 3

800401f3


결국 해결 하긴 했다.

Server.CreateObject ("ABCUpload.XForm")를

Server.CreateObject ("ABCUpload4.XForm") 로 고쳐서...

욕 나오네..


2012년 3월 27일 화요일

메일 수신 데몬 삭제

메일 수신을 사용하지 않는 데,  pop3 로그인 brute force 공격이 발생한다.

아예 해당 데몬을 삭제 하자.

yum remove imap dovecot

2012년 3월 22일 목요일

안녕하세요!

텍스트큐브를 삭제하고 대세(?)인 것 같은 워드프레스로 변경.

데이터 이전도 한번에 아주 쉽게 됬다.

느낌이 조으다.

2012년 3월 21일 수요일

오라클 11g 64bit 리눅스 한글 깨짐.

알고보면 엄청 간단한 건데, 이걸 처리하기 위행 장장 반나절을 소비했다.

오라클 한글깨짐에 대한 글들이 엄청많은 데, 정작 도움 되는 건 없고

여기서 도움을 받을 수 있었다.

중요한 건 저기 internal_use 가 필요한 것.
한글을 지원하는 것은 4가지가 있다.
KO16KSC5601 << 이건 사용하지 말자.
KO16MSWIN949
UTF8
AL32UTF8

이 중에서 한글 사이트 전용으로 할 것이기 때문에 KO16MSWIN949 선택.



SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET internal_use KO16MSWIN949;
SHUTDOWN IMMEDIATE;
STARTUP;

2012년 3월 1일 목요일

아웃룩 익스프레스 계정 받은 편지함 메일 사라짐.

아웃룩 익스프레스에서는 2G를 넘어가면 메일이 사라지는 오류가 있다.

해서 이걸 복구 해야 되는 데, 여러가지 방법을 사용해보고, 프로그램도 사용해 본 결과

이 방법으로 복구 할 수 있었다.



출처:http://www.deplay.co.kr/bbs/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=27&PHPSESSID=823ed02110140e45ab320b63620c361b

ps.특히 프로그램을 이용한 방법은 오랜 시간 걸려서 확인 했더니, 복구하려면 구매하려고 나와서 미치는 줄 알았다..;;



아웃룩 익스프레스의 DBX파일도 2기가가 넘으면 오류가 생깁니다.

마지막 사용하셨던 상태로 백업된게 있다면 다음과 같이 한 번 해보세요.

1. 현재 상태의 아웃룩 익스프레스에서 적당한 이름으로 새로운 폴더를 하나 만듭니다.
( 여기선 [Backup]이라고 하겠습니다..)
2. 시험삼아 아무 메일이나 하나 그 안에 넣어둡니다. (버려도 되는 메일을 복사해서 넣어두시길..)
3. 아웃룩 익스프레스를 종료합니다.
4. 아욱룩 익스프레스 데이터가 저장되는 폴더에 가보시면 Backup.dbx라는 파일이 생성되어 있을 겁니다.
5. 백업해 두신 2기가 정도 되는 원래의 받은편지함.dbx 파일의 이름을 Backup.dbx라고 바꾸신 후
6. 이 파일을 위 4번에서 확인한 새로 생성된 Backup.dbx 파일 있는 곳에 복사를 합니다. (물론 덮어쓰기)
7. 아웃룩 익스프레스를 다시 엽니다.
8. 최초에 새로 만든 Backup이란 폴더에, 백업해 두었던 원래의 받은편지함의 내용이 들어있는지 확인한다.

dbx파일 자체가 깨지지 않은 상태라면, 이렇게 하시면 문제 없이 여실 수 있습니다만
파일 자체가 깨진 상태라면 좀 힘드실 수도 있습니다.

2012년 2월 8일 수요일

2012년 2월 3일 금요일

MRTG LOG 분석.

1번라인 포함 계산.
604라인까지 5분단위 값.
1026라인까지 30분 단위 값.
1806라인까지 2시간 단위 값.
나머지까지 하루 단위 값.

2012년 1월 18일 수요일

PayPal cannot process this transaction because of a problem with the seller's website

PayPal cannot process this transaction because of a problem with the seller's website

일반사이트에서 페이팔을 연동하는 과정에서 발생하는 문제임.
buy now 에서 옵션 부분이 문제가 발생
사이트에서 보내는 옵션과 페이팔에서 셋팅돈 옵션의 불일치로 인해 발생하는 문제였다.

값을 한글로 셋팅했더니, 인코딩 문제로 인해 두개가 일치하지 않는 걸로 인식되는 것 같다.
영어로 상품명 변경하고 했더니, 정상적으로 등록 완료.

인코딩 문제는 아시는 분 댓글좀;;

2012년 1월 13일 금요일

mrtg - 트래픽 양을 숫자로 보여주기

0. 개요

    - 지난 게시물( http://hostinglove.com/bbs/board.php?bo_table=Tip_Tech&wr_id=16 )에서 매일매일의 최고트래픽을 구하는 방식을 살펴보았다.

    - 이제, 구해진 값으로 html 문서를 만들어서 으로 보여주자.

    - 항상 언급하지만, 스크립트는 개개인의 취향이라.... 정확한 답이 없고 본인이 편하게 작업하면 그만이다.. ^^

 

 

1. /etc/crontab



    - /etc/crontab 파일의 가장 끝부분에 위와 같이 한 줄을 추가해서

      /root/TopTraffic.sh 파일을 매일밤 11시 59분에 실행되게 했다.

    - /root/TopTraffic.sh 파일의 퍼미션은 700으로 했다.


 

2. /root/TopTraffic.sh


    - cat 명령에 '-n' 옵션을 추가해서 판독하기 쉽게 표현했다. 2,4,8라인이 공란이다.

    - 3라인의 리다이렉션('>>') 앞부분은 이전게시물을 참고하기 바란다. 이 값을 3886_8.traffic 파일로 계속 누적해서 기록한다.

    - 5~7라인은 3886_8.txt 파일에 매일매일의 최대트래픽을 누적해서 기록하고 있다.

      차후에 3886_8.txt 파일은 html 파일에서 인클루드시켜 보여주게 된다.

    - 'class=woo2' 등의 옵션은 html 문법을 모른다면 지나가도 좋다.. ^^

    - 6라인의 awk 명령어에서는 3886_8.traffic 파일의 $1,$2,$3 값을 가져오고 $5 값의 뒤에는 'MB'를 붙여서 기록하게 했다.

 


3. /home/mrtg/html/switch14/3886_8.traffic


    - 매일 밤 11시 59분에(/etc/crontab 파일에서 지정) 그날 하루중 가장 큰 트래픽이 발생한 시간과 트래픽 값이

      누적해서 기록되고 있다.


 

4. /home/mrtg/html/switch14/3886_8.txt


    - 3886_8.txt 파일에는 매일 밤 11시 59분에 3개의 라인씩 추가가 된다.

    - 이 파일을, 웹에서 보여지는 html 파일에서 필요한 부분에 불러오면 된다.


 

5. /home/mrtg/html/switch14/192.168.0.190.html


    - html 파일의 이름은 본인이 편하게 만들면 된다. 여기서는 서버의 IP인 192.168.0.190.html 으로 했다(가상값).

    - 30~32라인에서 3886_8.txt 파일을 불러왔다. php가 설치되지 않았다면 'iframe' 태그를 이용해도 된다.

    - html 파일을 보기 편하게 편집하는 것은 개개인의 스타일대로 하면 된다. 아니면 그냥 웹디에게 주자.. ^^;;

 


6. 웹에서 보기



    - 위에서 보이는 방식으로 매일매일 웹상에 추가되어 나타난다.

    - '그래프보기'를 클릭하면 원본 mrtg 트래픽의 그래픽을 볼 수 있게 했다.


http://hostinglove.com/bbs/board.php?bo_table=Tip_Tech&wr_id=17


mrtg - 하루중 가장 높은 트래픽 기록하기















[Linux] mrtg - 하루중 가장 높은 트래픽 기록하기
글쓴이 : 관리자     날짜 : 10-11-08 12:50     조회 : 1101    

0. 테스트 환경

    모든 테스트 환경은 2010년 11월 1일 기준의 최신 AnNyung Linux 배포판에서 했다.

 

 

1. 개요

    - mrtg를 운영할 경우, 매일매일의 (최대)사용트래픽을 숫자로 저장하고자 한다.

    - 통상적으로, 그래프로 나타내어 지는 트래픽의 양은 정확한 수치로 표현하기가 어렵다.

    - 따라서, mrtg 로그파일을 이용하여 하루에 한 번씩 가장 높은 트래픽을 추출하여 별도의 숫자로 기록하는 방식이다.

 

 

2. mrtg 로그파일


    - 스위치의 해당 포트에 대한 트래픽 양을 기록한 로그파일은 확장자가 .log 파일이다.

    - 여기서는 3886_8.log 파일을 해당 포트의 트래픽 로그파일로 가정한다.

    - 로그파일의 내용을 살펴보면, 그 포맷은 다음과 같다.

 

      첫번째라인 : timestamp값 | IN bytes 갯수 |  OUT bytes 갯수

      두번째라인이후 : timestamp값 | 평균 IN bytes |  평균 OUT bytes | 최대 IN bytes | 최대 OUT bytes

 

 

3. 쉘상에서 하루 최대트래픽 가져오기

    - mrtg의 로그는 5분(=300초) 간격으로 기록되므로, 한시간에 12라인이.... 하루에 288라인이 기록된다.

    -  첫 라인을 제외하고, 두 번째 라인부터 289라인까지가 현시간을 기준으로 1일 쌓인 mrtg 로그이다.

    - 여기서 필요한 값은, 첫 번째 칸의 timestamp 값과 네 번째 칸의 최대 IN bytes 값이다.

    - 따라서, 로그파일의 두 번째 라인부터 289라인까지의 값 중에서 네 번째 칸이 가장 큰 값을 가져오면 된다.

 


      head -n 289 3886_8.log  // 3886_8.log 파일의 첫 라인부터 289라인까지 가져온다.

      tail -n 288                       // 가져온 값에서 첫 라인을 제외하고 나머지 288라인을 가져온다.

      sort -k4 -n -r              // 네 번째 필드를 기준으로(-k4), 숫자순서로(-n), 내림차순으로(-r) 정리한다.

      head -n 1                       // 정렬된 값의 가장 처음 라인을 가져온다.

 

    - 위의 결과값으로 나온 필드 중에서 첫 번째(1288707600) 필드와 네 번째(4544071) 필드만 필요하다.

       첫 값은 timestamp 값이고, 네 번째 필드가 트래픽 값이며 단위는 bytes 이다.

 

 

4. 추출값 변환

 

    - 위의 명령어는 한 줄이다. 중간에 awk 다음에 역슬래쉬(\)를 넣은 것은 생략하고 한 줄로 적으면 된다.

    - 해당 명령어로 원하는 값을 얻었다.

       2010년 11월 02일 23:20:00 시간에 29.4메가의 트래픽이 하루동안 가장 큰 트래픽이다.

    - timestamp값을 변환하여 알아보기 쉽게 하였고, 트래픽은 메가단위로 소숫점 한자리까지만 나타냈다.

    - awk 명령어에 대한 내용은 다른 자료를 찾아보기 바란다. 내용이 길어져서 차후에 별도로 지면을 할애하여 설명할 계획이다.

 

    - 참고1 : perl이 설치되어 있다면, 다음의 명령어로 콘솔상에서 timestamp값을 바로 변환할 수도 있다.

       # perl -e 'print scalar localtime(1288707600),"\n"'

       Tue Nov  2 23:20:00 2010

 

    - 참고2 : 추출데이터를 약간 가공만 하면, 하루 누적트래픽 등도 구할 수 있다.

http://hostinglove.com/bbs/board.php?bo_table=Tip_Tech&wr_id=16