Search Results for '프로그래밍'


1208 posts related to '프로그래밍'

  1. 2009/05/05 [QnA] Cygwin(시그윈) 매뉴얼 있는 곳은?
  2. 2009/05/05 Cygwin 명령어 목록, 시그윈에서 사용 가능한 기본 명령 리스트 1
  3. 2009/05/04 [스크립트] 마우스 오른쪽클릭방지 해제 스크립트
  4. 2009/04/30 리눅스 간단 명령어 정리 모음
  5. 2009/04/30 GUI 저리가라!! 강력한커맨드 FTP - NCFTP !!
  6. 2009/04/30 find 명령어와 펄스크립트를 사용할 때 ' (홑따옴표) 의 처리.
  7. 2009/04/30 파일 내용 일괄 변경 및 파일 일괄 관리
  8. 2009/04/30 wget 활용 - 헤더정보 보기, 파일을 다운로드 하여 특정이름으로 저장
  9. 2009/04/29 Cygwin (시그윈) 다운로드/설치법 [윈도우에 리눅스/유닉스 환경 만들기]
  10. 2009/04/27 textarea 에 asp 코딩 편하게~ 1
  11. 2009/04/27 MSTSC (웹 터미널클라이언트)
  12. 2009/04/27 ASP로 테스트 해본 RSS Reader
  13. 2009/04/27 ASP용 로그 기록 클래스
  14. 2009/04/27 사진 업로드시 워터 마크 자동 입력 프로그램입니다.
  15. 2009/04/27 WireFrame.ASP 소개
  16. 2009/04/27 윈도우서버용 무료메일서버 hMail Server를 소개합니다.
  17. 2009/04/27 GeoIP 국가별 IP체크
  18. 2009/04/27 페이지 수행시간 체크 심플컴퍼넌트(백만분의1초 정확성)
  19. 2009/04/27 Classic ASP용 XMLRPC Class
  20. 2009/04/27 Classic ASP용 Database Object
  21. 2009/04/27 외부 이미지 저장 소스
  22. 2009/04/27 외부 이미지 저장 하는 방법 저장 하기 php
  23. 2009/04/27 외부 이미지 서버에 저장하기
  24. 2009/04/27 [함수] 세이케스트 방송정보 알아내기 2009.3.29
  25. 2009/04/27 CSS 브라우저별 핵 정리
  26. 2009/04/27 [Tip&Tech] 팁텍에 올리기는 너무 허접해서 iframe resize 간단히
  27. 2009/04/21 Trim 공백제거
  28. 2009/04/21 윈도우 DoS 공격 방어 레지스트리 권장값과, 보안관련 레지스트리 키
  29. 2009/04/21 vbscript decode
  30. 2009/04/21 테이블명세서생성스크립트::SQL Database documentation script
저도  시그윈을 설치하고 매뉴얼이 어디 있는지 몰라서, 시그윈 사이트에 다시 가서 매뉴얼을 다운로드받았었는데, 알고 보니 시그윈을 설치할 때 매뉴얼을 같이 설치해주더군요.

Cygwin을 설치했다면, 윈도 시작메뉴의 Cygwin 이라는 곳에, 다음과 같은 '바로가기 파일'들이 있습니다:

Cygwin API Reference
Cygwin FAQ
Cygwin User's Guide
User's Guide (One file)
User's Guide (PDF)



User's Guide (PDF) 인, \cygwin\usr\share\doc\cygwin-doc-1.4\cygwin-ug-net.pdf <- 이 파일이 읽기에 편했습니다.
2009/05/05 05:16 2009/05/05 05:16
\cygwin\bin 디렉터리에, 201개나 되는 .exe 파일이 있습니다:
addftinfo.exe
ascii.exe
ash.exe
banner.exe
basename.exe
bash.exe
bunzip2.exe
bzcat.exe
bzip2.exe
bzip2recover.exe
cat.exe
chgrp.exe
chmod.exe
chown.exe
chroot.exe
cksum.exe
clear.exe
cmp.exe
comm.exe
conv.exe
cp.exe
crypt.exe
csplit.exe
cut.exe
cygcheck.exe
cygpath.exe
cygstart.exe
d2u.exe
date.exe
dd.exe
df.exe
diff.exe
diff3.exe
dir.exe
dircolors.exe
dirname.exe
dos2unix.exe
du.exe
dump.exe
dumper.exe
dumpgdbm-1.3.22.exe
dumpgdbm-1.5.2.exe
dumpgdbm.exe
echo.exe
editrights.exe
env.exe
eqn.exe
expand.exe
expr.exe
factor.exe
false.exe
find.exe
fmt.exe
fold.exe
gawk-3.1.5.exe
gawk.exe
getclip.exe
getfacl.exe
gkill.exe
grep.exe
grn.exe
grodvi.exe
groff.exe
grolbp.exe
grolj4.exe
grops.exe
grotty.exe
gzip.exe
head.exe
hostid.exe
hostname.exe
hpftodit.exe
iconv.exe
id.exe
indxbib.exe
info.exe
infocmp.exe
infokey.exe
install-info.exe
install.exe
ipcrm.exe
ipcs.exe
join.exe
kill.exe
less.exe
lessecho.exe
lesskey.exe
link.exe
lkbib.exe
ln.exe
loadgdbm-1.3.22.exe
loadgdbm-1.5.2.exe
loadgdbm.exe
locate.exe
login.exe
logname.exe
lookbib.exe
lpr.exe
ls.exe
makeinfo.exe
man.exe
man2html.exe
md5sum.exe
mkdir.exe
mkfifo.exe
mkgroup.exe
mknod.exe
mkpasswd.exe
mkshortcut.exe
mktemp.exe
mount.exe
msgtool.exe
mv.exe
nice.exe
nl.exe
nohup.exe
od.exe
passwd.exe
paste.exe
pathchk.exe
pfbtops.exe
pgawk-3.1.5.exe
pgawk.exe
pic.exe
pinky.exe
post-grohtml.exe
pr.exe
pre-grohtml.exe
printenv.exe
printf.exe
ps.exe
ptx.exe
putclip.exe
pwd.exe
readlink.exe
readshortcut.exe
realpath.exe
refer.exe
regtool.exe
rm.exe
rmdir.exe
run.exe
sdiff.exe
sed.exe
semstat.exe
semtool.exe
seq.exe
setfacl.exe
sh.exe
sha1sum.exe
shmtool.exe
shred.exe
sleep.exe
soelim.exe
sort.exe
split.exe
ssp.exe
stat.exe
strace.exe
stty.exe
su.exe
sum.exe
sync.exe
tac.exe
tack.exe
tail.exe
tar.exe
tbl.exe
tee.exe
test.exe
testdbm.exe
testgdbm.exe
testndbm.exe
texindex.exe
tfmtodit.exe
tic.exe
toe.exe
touch.exe
tput.exe
tr.exe
troff.exe
true.exe
tset.exe
tsort.exe
tty.exe
u2d.exe
umount.exe
uname.exe
unexpand.exe
uniq.exe
unix2dos.exe
unlink.exe
users.exe
vdir.exe
wc.exe
which.exe
who.exe
whoami.exe
xargs.exe
yes.exe
[.exe


위의 파일들이 명령어로서 실행됩니다.
2009/05/05 05:13 2009/05/05 05:13
javascript:function r(d){d.oncontextmenu=null;d.onselectstart=null;d.ondragstart=null;d.onkeydown=null;d.onmousedown=null; d.body.oncontextmenu=null;d.body.onselectstart=null;d.body.ondragstart=null;d.body.onkeydown=null; d.body.onmousedown=null;}function s(f){if(f.frames.length!=0){for(var i=0; i<f.frames.length; i++){s(f.frames[i]);}}try{r(f.document);}catch(error){}}s(window.top);


마우스 우클릭 방지된사이트가있다면 주소창에 주소바로앞에 위의 스크립트를

복사해서 넣으시면됩니다.

ex) 주소창 : 위스크립트 http://webarty.com

이제 당신도 응응한사진을 퍼갈수 있다!! 
2009/05/04 20:17 2009/05/04 20:17
리눅스 간단 명령어 정리 모음 입니다. 참고하세요

alias (명령어 간소화하기)
apropos (관련된 명령어 찾기)
arch (컴퓨터 종류 알기)
arp (같은 서브넷의 IP 보여주기)
at (작업 시간 정하기)
atd (계획성 있는 작업 실행하기)
awk (특정 패턴 문자 처리하기)
a2p (펄 파일로 바꾸기)
badblocks (배드 블럭 검사하기)
bc (계산기)
biff (메일 수신 소리로 확인하기)
bg (후면작업; 배경화면 설정)
bind (키나 함수 순서 결합하기)
break (루프 빠져나가기)
cal (달력보기)
builtin (내부 명령어 알아보기)
case (조건 처리하기)
cat (화면상에서 파일 보기)
cd (디렉토리 변경하기)
cfdisk (디스크 설정하기)
chattr (파일 속성 변경하기)
chfn (사용자 정보 변경하기)
chgrp (파일, 디렉토리가 속했던 그룹 바꾸기)
chmod (파일 권한 바꾸기)
chown (파일 주인 바꾸기)
chsh (지정된 셸 바꾸기)
cksum (CRC값을 점검한다)
clear (화면 청소하기)
clock (CMOS 시각을 조정하기)
cmp (파일 비교하기)
colcrt (문자 변환 필터)
colrm (열 삭제하기)
column (가로 정렬하기)
comm (파일 비교 출력하기)
command (명령어 알아보기)
continue (루프 계속돌기)
cp (파일 복사하기)
cpio (복사본 만들기)
crontab (cron을 관리한다)
csplit (파일에 서식, 규칙 정하기)
cut (필요한 필드만 출력하기)
date (날짜 보기)
dd (블럭장치 읽고 쓰기)
debugfs (ext2 파일 시스템 디버깅하기)
declare (변수 선언하기)
df (파일 시스템의 사용량 보기)
dirs (디렉토리 목록 표시하기)
dmesg (부팅 메시지 보기)
dnsdomainname (DNS 이름 출력)
domainname (NIS 이름 출력&설정)
du (디렉토리와 파일의 용량 파악하기)
dumpe2fs (파일 시스템 정보 보기)
echo (표준 출력하기)
eject (장치 해제하기)
elm (메일 관련)
enable (내부 명령어 지정)
env (환경변수 출력하기)
eval (인수 읽기)
exec (셸 명령어 실행하기)
exit (종료하기)
expand (탭을 공백으로 변환하기)
export (변수 지정하기)
e2fsck (파일 시스템 복구하기)
fc (지정된 편집기 받기)
fdformat (플로피 디스크 포맷하기)
fdisk (파티션 나누기)
fg (지정된 작업을 전면 프로세스로 시작하기)
file (파일 종류 보기)
find (파일 찾기)
finger (사용자 정보 알기)
fold (정형화하기)
fmt (정형화하기)
for (반복 실행하기)
free (메모리 사용량 알아보기)
fsck (파일 시스템 검사하기)
fstab (파일 시스템에 대한 고정적인 정보 저장하기)
ftp (파일 전송 프로그램)
fuser (프로세스 ID 출력)
getkeycodes (매핑 테이블 출력하기)
grep (특정 문자 (열) 검색하기)
gzexe (실행 파일 압축하기)
gzip (압축하기)
halt (시스템 종료하기)
hash (기억해 두기; index 역할)
head (파일의 앞부분 출력하기)
help (도움말 보여주기)
host (호스트 정보 보기)
history (사용 명령어 목록보기)
hostname (서버 이름 알기)
id (계정 정보 알기)
if (조건문 실행하기)
ifconfig (랜카드에 주소 할당하기)
imolamod (모듈 설치하기)
inetd (인터넷 서비스의 최상위 데몬)
init (실행 단계 정하기)
ispell (철자법 검사하기)
jobs (수행중인 프로세스 알기)
kbd_mode (키보드 모드 출력하기)
kill (프로세스 죽이기)
klogd (커널 로그 데몬)
ldd (공유 라이브러리의 의존성 알기)
less (페이지 단위로 출력하기)
let (정규식 표현하기)
lilo (부팅하기)
ln (링크하기)
locate (패턴에 맞는 파일 찾기)
login (로그인하기)
logger (시스템 로그 기록하기)
logname (사용자 로그인명 보여주기)
logout (로그인 셸 종료하기)
look (특정 단어 검색하기)
losetup (중복 장치 확인하기)
lpd (프린트 데몬)
lpq (현재 프린트 작업 상태 출력하기)
lpr (출력하기)
lprm (대기열에 있는 문서 삭제하기)
ls (디렉토리 내용보기)
lsattr (파일 시스템의 속성 보여주기)
lsdev (하드웨어 장치 출력하기)
lsmod (모듈 정보 출력하기)
mail (메일 관련)
make (컴파일하기)
man (매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg (메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs (파일 시스템 생성하기)
mkfs (파일 시스템 만들기)
mknod (특수 파일 만들기)
mkswap (스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount (장치 연결하기)
more (화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt (메일 관련)
mv (파일 옮기기)
mzip
netstat (현재 네트웍 상황 보기)
nice (프로세스 우선 순위 변경하기)
od (8진수로 파일 보기)
passwd (암호 입력하기)
pidof (실행중인 프로그램의 프로세스 ID 찾기)
pine (메일 관련)
ping (네트웍 확인하기)
popd (pushd 취소)
ps (프로세스 纘?알기)
pstree (프로세스 상관관계 알기)
pwd (절대경로 보여주기)
quota (디스크 한계량 알기)
rarp (rarp 테이블 관리하기)
rcp (원격 호스트에 파일 복사하기)
rdev (루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate (네트웍으로 시간 설정하기)
reboot (재부팅하기)
rmmod (모듈 지우기)
readonly (읽기 전용으로 표시하기)
renice (프로세스 우선 순위 바꾸기)
reset (터미널 초기화하기)
restore (다시 저장하기)
rlogin (바로 접속하기)
rm (파일 지우기)
rmdir (디렉토리 지우기)
route (라우팅 테이블 추가/삭제하기)
rpm (프로그램 추가/삭제)
rpm2cpio (rpm을 cpio로 변환하기)
rsh (원격으로 명령어 실행하기)
rup (호스트 상태 출력하기)
rusers (호스트에 로그인한 사용자 출력하기)
rwall (호스트 사용자에게 메시지 뿌리기)
script (기록하기)
set (변수값 설정하기)
setup (시스템 관련 설정하기)
showmount (호스트의 마운트 정보 보여주기)
shutdown (전원 끄기)
sleep (잠시 쉬기)
source (스크립트 번역하기)
split (파일 나누기)
ssh (암호화된 원격 로그인하기)
stty (터미널라인 설정 보여주기)
su (계정 바꾸기)
suspend (셸 중단하기)
swapoff (스왑 해제하기)
swapon (스왑 활성화하기)
sync (버퍼 재설정하기)
syslogd (로그인 과정 설정하기)
tac (거꾸로 보기)
tail (문서 끝부분 출력하기)
talk (이야기하기)
tar (파일 묶기)
tcpdchk (tcp wrapper 설정하기)
tcpmatch (네트웍 요청에 대해 예측하기)
tee (표준 입력으로부터 표준 출력 만들기)
telnet (원격접속하기)
test (테스트하기)
times (셸에서의 사용자와 시스템 시간 출력하기)
top (cpu 프로세스 상황 보여주기)
tr (문자열 바꿔주기)
true (종료 코드 리턴하기)
type (유형 보기)
ul (밑줄 처리해서 보여주기)
ulimit (제한하기)
umask (매스크 모드 설정하기)
umount (장치 해제하기)
unalias (별명 제거하기)
uname (시스템 정보 보기)
unexpand (공백 문자를 탭으로 변환하기)
uniq (중복된 문장 찾기)
useradd (사용자 계정 만들기)
userdel (계정 삭제하기)
usermod (사용자 계정정보 수정하기)
unset (설정 변수 해제)
uptime (시스템 부하 평균 보여주기)
users (로그인된 사용자 보여주기)
w (시스템에 접속한 사용자 상황 알아보기)
wait (프로세스 기다리기)
wall (모든 사용자에게 메시지 보내기)
wc (문자, 단어, 라인수 세기)
whatis (명령어의 간단한 설명보기)
while (루프 명령어)
who (사용자 알기)
write (콘솔 상에서 간단한 메시지 보내기)
xcopy (반복적으로 복사하기)
XFree86
ypchfn (NIS에서 사용하는 chfn 명령어)
ypchsh (NIS에서 사용하는 chsh 명령어)
yppasswd (NIS에서 사용하는 passwd 명령어)
zcat (압축 파일 보기)
zcmp (압축 파일 비교하기)
zforce (강제로 gz 만들기)
zgrep (압축 상태에서 grep 실행하기)
zmore (압축 상태에서 more 실행하기)
2009/04/30 15:13 2009/04/30 15:13

GUI 저리가라!! 강력한커맨드 FTP - NCFTP !! [중급]


안녕하세요... 오늘 강좌할 내용은 커맨드라인 ftp프로그램인 ncftp입니다.

이프로그램은 원래 리/유닉스용으로 만들어진것입니다.

하지만 윈도우에는 포식스(POSIX)기반 프로그램을 실행할수가 있답니다.

그래서 유닉스의 명령어를 포팅할수가 있습니다...

윈도우의 기본 ftp인 ftp.exe는 말그대로 기초적인것만 제공합니다. 하지만

ncftp프로그램은 윈도우의 GUI기반의 FTP프로그램이 가진 기능 거의 모두를

지원하고 있습니다.... 이에따라 커맨드 명령이 몇개더 늘어낫지만,

천천히 시간을 두고  하나씩 배워가시게 되면 나중에 리눅스/유닉스를 공부

할때에도 별다른 어려움없이 ncftp를 사용하실수가 있습니다....

이전에도 말한바가 있었지만,  윈도우에서도 사용하면서 유닉스에서도

사용할수있는 프로그램을 배워두시면 어떤 운영체제에서도 당황함이 없이

자신이 할려는 작업을 할수가 있습니다... 이점을 생각해두시고 공부하시기

바랍니다......

ncftp프로그램의 전체적인 설명은 하지 못하였습니다만, 아래에 설명하는

명령어만 익히셔도 사용에는 지장이 없습니다.....!!!

원래는 매뉴얼로 제작할려고 하였으나, 너무 졸작이 되는것 같아서 이에

그림없이 강좌를 합니다. 이점 양해해주시면 감사하겠습니다..

먼저 프로그램의 홈페이지는 http://www.ncftp.com 입니다.

Download에 가셔서 win32용으로 설치하시면 됩니다..

아니면 여기!!

를 눌러서 설치하시기 바랍니다.


--------------------------------------------------------------------------------

이름
NCFTP.EXE
NcFTP – 파일전송프로토콜용 검색프로그램

사용법
ncftp [ 호스트명 ]
ncftp [ ftp://호스트명/폴더명/ ]

설명
ncftp프로그램은 인터넷 표준 유틸리티인 ftp 프로그램과 100%호환된다.
또한, ncftp프로그램은 강력하고 유연한 명령어를 지원하고 있다.
ncftp프로그램은 커맨드라인 프로그램이다. 현재 그래픽환경의 프로그램이
지원하는 기능이상의 기능을 지원하고 있다.
파일명 자동완성기능
커맨드라인 에디팅
백그라운드 처리
자동이어받기 기능
즐겨찾기 기능
디렉토리 캐싱 기능
호스트 재접속 기능
방화벽, 프락시 작업
전체디렉토리 다운로드 기능
등등.. 수많은 기능을 지원하고 있다. 위의 기능들은 대표적인것일
뿐이다.
또한 표준 ftp명령어를 완벽히 지원하고 있다.

옵션
커맨드라인에서의 호스트명과 디렉토리의 URL을 지원한다
커맨드창을 열고 ncftp [ 호스트명 | 호스트명/디렉토리 ] 의
방식으로 사용할 수가 있다.
아래와 같은 옵션을 지원한다.
-u xx    : 사용자명을 지정하게 된다.(기본값:anonymous)
-p xx    : 사용자명에 따른 비밀번호를 지정한다.
-P xx     : 포트번호를 지정한다.(기본값:21번)
ncftp –u kpj666 –p 1234 –P 2100 ftp.bora.net
위와 같은 명령은 ftp.bora.net이란 서버에 사용자계정 kpj666과
비밀번호 1234와 서버의 포트번호 2100 으로 접속하는 경우이다.
중요한 것은 –u –p –P 옵션이 먼저 적은후에 서버명이 온다는것이다.
Ncftp ftp.bora.net      과 같이 입력하게 되면 기본값인
Anonymous / Email주소 가 자동으로 입력되게 된다.

커맨드 쉘의 소개
지금부터의 설명은 옵션이 없는 상태에서 단지 ncftp만 실행하였을경우
사용법을 간단히 설명한후에 명령어 의 전체적인 설명을 하겠다.
상대방의 컴퓨터에 접속하여서 자신의 컴퓨터로 파일전송을 하기 위해서
먼저 상대방의 서버에 접속하려면 상대방의 IP번호 또는 도메인이름을
사용하게 된다.
open ftp.bora.net   (도메인명으로 사용)
open 129.93.33.24     (IP번호 사용)
IP번호로의 접속은 정적IP에만 유효하다. 도메인으로의 접속은
매번 같은 이름으로 접속가능하게 된다.
상대방의 서버에 접속하게 되면 권한이 필요하게 된다. FTP프로토콜은
상당히 간단한 방식으로 계정을 확인하게 된다.
사용자 계정 / 계정에 따른 비밀번호
하지만 대부분의 서버들은 이러한 계정/비밀번호가 없이도 사용가능한
공개용 계정/비밀번호가 존재한다.
Anonymous / 이메일주소
ftp   /  ftp
위와 같은 방식으로 접속할수 있고 이런계정으로 접속하는 서버를
공섭이라고 부른다. (Public Server)
이메일주소에서는 @문자만 검사하므로 반드시 실제 이메일주소일
필요는 없다.  a@a.c    라고 해서도 지장이 없다.
이러한 공개섭들에서는 대부분 읽기만 허용해놓은경우가 대부분이다.
읽기권한은 곧 다운로드만 가능하다는 뜻이다. 해당 서버의 관리자가
설정하기 나름이다.
Open 명령어로 상대방의 서버에 접속이 되었으면, 서버의 현재 디렉토리를
보여주는 명령어 ls 또는 dir 을 입력해서 서버의 디렉토리를 확인한다.
서버에서의 디렉토리 이동은 cd 명령어로서 사용하게 된다.

서버에서 자신의 컴퓨터로 파일을 다운로드 할려면 get 파일명 과 같은
명령어를 사용하게 된다.
get README.txt
ncftp프로그램은 파일전송상황을 화면에 표시하게 된다.파일전송이 완료된후에 다른 명령어를 입력할수 있게 된다.
자신의 컴퓨터에 존재하는 파일을 서버에 업로드 할려면 put 파일명  과
같은 명령어를 사용하게된다.
put something.tar
더 이상의 작업이 필요없을 경우에는 quit 명령을 입력하여 ncftp를 종료
하게 된다. Ncftp를 종료하게 전에 현재 연결상태(서버명/계정/비밀번호..)를
저장할경우에는 bookmark 명령을 사용하게 된다.
Bookmark boranet

또한 북마크해둔 이름으로 접속할수있다.
Ncftp boranet      과 같이 하게되면 마지막상태로 접속하게된다.
명령어 레퍼런스
커맨드쉘상태에서 (접속된상태) 입력하게 된다.
help
현재 버전에서 지원하는 명령어를 표시하게된다.
Help 명령어 와 같이 입력하게 되면 해당명령어의 문법과
간단한 설명을 표시하게 된다.
Ex) help open 
ascii
파일전송시에 전송모드를 ascii모드(텍스트모드)로 변경한다.
도스 to 유닉스간의 텍스트파일전송시에 유용하게 사용된다.
보통의 ftp들은 기본값이 ascii이지만 ncftp의 경우는 기본값이
binary 로 셋팅되어 있다.
      Ex) ascii 
bgget, bgput
이들 명령어들은 get명령과 put명령어들과 사용법이 같다.
하지만 작업처리를 후면처리(백그라운드)로 하게 된다.
후면처리로 업/다운로드 작업을 주게되면 다른작업을 할 수가
있게된다. 보통의 get/put명령어는 이들 명령이 완료될때까지
입력을 할 수가 없지만 bgget/bgput명령어는 곧바로 다른
명령을 입력할 수가 있게 된다.
다운로드/업로드작업을 하면서 서버를 탐색할수도 있는것이다.
Ncftp의 강력한 기능중 하나이다.
 
bgget / bgput  명령어는 전송스케쥴링을 지원한다.
-@  문자뒤에 YYYYMMDDhhmmss 와같이 시간을 지정할수있다.
2001년 12월 20일 새벽2시정각에 파일을 다운로드할려면,
bgget -@ 20011220020000 /pub/kpj666/test.zip
      위와 같이 기입하게 되면 된다. 
binary
전송방식을 이진수방식에 맞게끔 세팅하게 된다.ncftp의 기본값이다.
일반적인 ftp의 기본값은 ascii이다.
 
bookmark
현재 세션을 저장하고 나중에 재사용할 수가 있다. 원격서버의
각종 설정값을 모두 기억하게 된다.
      Ex) bookmark test
bookmarks
현재 저장되어있는 북마크(즐겨찾기)를 사람이 이해할 수 있는 문자로
리스팅해준다. 전체설치를 하였다면 GUI환경이 나타나게 된다.
즐겨찾기 관리툴이라고 생각하면 된다.
 
cat
유닉스의 cat툴과 유사하다. 원격파일에만 사용가능하다.
다운로드받은 파일을 화면에 덤프하는 명령어이다. 파일의 내용을
볼려고 할 때 주로 사용하게 된다.
      Ex) cat Readme.txt 
cd
원격서버의 디렉토리를 변경하는 명령어이다
cd pub
cd news
cd comp.sources.d
위와 같은 명령은 아래와 같이 한번에 할수 있다.
cd /pub/news/comp.sources.d
또한 마지막 디렉토리로 이동하는 명령어도 존재한다.
cd –

chmod
유닉스의 chmod툴과 동일하다. 원격서버의 파일의 퍼미션을
수정하는 명령어이다. 물론  수정할 권한이 있어야 한다.
 
close
원격서버에 접속을 끊는다.
 
debug
내부테스트용 명령어이다. 디버깅모드라는 것이 존재한다.
서버의 모든메세지를 화면 혹은 파일에 저장하는 명령어이다.
서버의 작동원리를 알고자 할 때 사용하며 , 서버의 오작동
유무도 파악할 수가 있다.
 
dir
유닉스의 ls –l 과 같은 효과를 내는 리스팅 명령어이다.
도스사용자를 위한 명령어이다.  Ls와 같은 명령어이다.

get
원격서버의 현재 디렉토리에서 로컬컴퓨터의 현재 디렉토리로 다운로드 하는 명령어이다.
Ex) get Readme.txt
파일명을 공백으로 분리해서 여러 개를 줄수 있다.
Ex) get Readme.txt test.bin document.doc
또한 와일드카드문자를 사용할수도 있다.
Ex) get Read*
-z 플래그와 사용하게 되면 원격파일을 다운로드할 때 로컬컴퓨터에 다른파일명으로 저장할수도 있다.
Ex) get –z Readme.txt README
자동이어받기기능은 기본값으로 세팅되어있다. 이어받기기능은 물론
서버에서 지원해야 사용가능하다. 200메가 파일을 다운로드중에
100메가다운로드 중에 끊어졌다면 get명령은 다시 100메가부터
다운로드를 하게 된다.
      기존에 존재하는 파일에 추가할려면 –A 플래그와 사용하게 된다.
get -A log.11
위의 명령은 로컬컴퓨터에 log.11파일이 존재하면 추가하게된다.
get –DD
위의 명령은 서버파일을 다운로드후에 삭제하는 플래그이다.
      Get –R
      위의 명령은 서브트리를 포함하는 모든 디렉토리를 다운로드하게된다.
 
jobs
후면작업으로 처리되는 작업리스트를 보여주게된다. 유닉스의 jobs
명령과 동일하다.
 
lcd
lcd 명령에서 처음문자인 l 은 local을 뜻한다. 즉 현재 로컬컴퓨터의
디렉토리를 이동하게 한다.
get,put명령들은 현재 로컬디렉토리를 기준으로 하기 때문에                 로컬디렉토리를 이동할경우 사용하는 명령어이다.
lchmod
로컬컴퓨터의 파일의 퍼미션을 수정하는 명령어이다.
 
lls
로컬컴퓨터의 리스팅 명령어이다.

lmkdir
      로컬컴퓨터의 디렉토리 생성시에 사용하는 명령어이다. 
lookup
ncftp의 내장된 lookup명령어이다. 즉 인터넷의 이름풀기서버인
DNS서버를 질의 하는 명령어이다.
Ex) lookup openserver.co.kr
lpwd
로컬컴퓨터의 현재 작업디렉토리를 표시하게 된다.
 
lrename
로컬컴퓨터의 파일명을 변경하는 명령어이다.
유닉스의 mv 명령어와 동일하게 사용된다.
 
lrm
로컬컴퓨터의 파일을 삭제하는 명령어이다.
유닉스의 rm과 동일하게 사용된다.
 
lrmdir
      로컬컴퓨터의 디렉토리를 삭제하는 명령어이다.
      유닉스의 rmdir과 동일한 명령어이다. 
ls
원격서버의 디렉토리 리스팅 명령어이다. 유닉스의 ls –CF와 동일하게 리스팅하게 된다.
ls –rt    명령은 유닉스 시스템에서는 ls –CFrt 와 같이 된다.
Ncftp는 디렉토리 리스팅시에 디렉토리 캐시를 지원한다.
디렉토리 캐시는 작업속도를 빠르게 만들어주게 된다.
 
mkdir
원격서버에 디렉토리를 생성하는 명령어이다.
 
open
원격서버에 접속하는 명령어이다. 원격서버에 anonymous로 접속을
시도 하게 된다. 계정으로 접속하기를 원할경우에는 여러 플래그를
사용하게 된다.
-u         Anonymous 대신에 계정을 사용하게 된다.
-p          계저에 따른 패스워드를 지정하게 된다.               
-P         기본포트인 21번포트이외의 포트번호를 지정한다

page
원격서버의 파일의 내용을 화면에 페이지단위로 표시한다.
 
put
로컬파일을 원격서버에 복사하는 명령이다.(업로드)
put xx.zip yy.zip
위의 명령은 로컬파일인 xx.zip을 서버에 yy.zip파일로 업로드한다.
put *.zip
위의 명령은 로컬파일중 모든 zip파일을 서버에 업로드 한다.
put -z kpj666 KPJ666.ZIP
위의 명령은 로컬파일인 kpj666 이란 파일을 서버에 KPJ666.ZIP파일로 업로드 하는 명령이다.
put명령은 위에서 기술한 get명령의 플래그들과 동일하게 작업한다.
  pwd
원격서버의 현재 작업디렉토리를 표시하는 명령어이다.
 
quit
      ncftp프로그램을 종료하는 명령어이다.  
quote
FTP서버의 명령을 전송하는 명령어이다. 클라이언트명령이 아닌
서버의 명령을 전송하게된다.
rename
      원격서버의 파일명을 변경하는 명령어이다.
rhelp
원격서버의 명령어의 도움말을 볼수 있게 하는 명령어이다.
rhelp NLST
위의 명령은 서버의 NLST란 명령어의 도움말을 표시하라는 명령이다.
Syntax: NLST [ path-name ]
      이에 위와 같은 응답을 하게 된다.
rm
원격서버의 파일을 삭제하는 명령이다. 삭제 권한이 있을경우에만
사용가능하다.
 
rmdir
원격서버의 디렉토리를 삭제하는 명령어이다. Ncftp의 rmdir명령은
원격서버의 디렉토리가 비록 비어있지 않더라도 삭제되므로
사용에 주의를 요망한다.
set
ncftp프로그램의 기본값을 세팅할수있게 하는 명령어이다.
set
위와 같은 형식으로 사용하게 된다.예를 들어 anonymous의 비밀번호인 기본이메일주소를 변경하기 위해서는 아래와 같이
입력한다.
set anon-password kpj666@hanmail.net
show
set명령으로 설정할 수 있는 기본값을 표시한다.
Show anon-password   명령 또는 show 명령과 같이 사용한다.
모든값을 표시하려면 show all    과 같이 all옵션을 주면된다.
type
파일전송모드를 변경할 때 사용하는 명령어이다. 아래와같이
3가지의 명령이 존재한다. 각각 텍스트,2진파일,이미지파일전송시에
사용한다.
type ascii     = type a
type binary    = type b
type image     = type i
umask
유닉스의umask와 동일한 명령어이다. 서버에서 지원해야 사용가능
한 명령어이다. umask값이란 디렉토리/파일이 생성될 때 기본
퍼미션을 잡아주는 명령어이다.
version
현재 자신의 시스템에 설치되어있는 ncftp프로그램의 버전정보를
표시한다.

디렉토리명은 TAB 키를 누르게 되면 자동완성 까지 시켜주게 된다.

--------------------------------------------------------------------------------


실제 사용예는 마땅히 표현할것이 없기에.... 생략하였습니다...

ftp를 사용하셨던 분이시라면 충분히 이해하리라 생각합니다.....

그럼 한겨울로 접어드는 날씨에 감기 조심하시구요, 새해에 복 많이 받으세요!!

******************************
******  Make by KPJ666 ******
******************************

2009/04/30 13:38 2009/04/30 13:38
find 명령어를 사용하여 파일의 내용을 일괄적으로 특정 내용으로 변경하는 방법. 라는 글에서 find 명령어로 파일의 내용을 일괄변경하는 방법에 대해서 언급한 적이 있는데요. 오늘도 수천개의 파일의 내용을 동시변경할 일이 있어서 하던대로 했더니 이상한 문법 에러를 밷으면서 안되더군요.

그래서 뭐가 달라졌나 봤더니.. 바꿀 대상 문자열에 ' (홑따옴표) 와 % 기호가 있다는 것이 달라진 점이더군요. 일단 /, ", % 는 앞에 \ 를 붙여주니 해결이 되었는데, ' 는 앞에 \ 를 붙여주어도 해결되지 않았습니다. 조금 삽질을 하다가.. 아마 전체 문자열을 둘러싸고 있는 기호가 홑따옴표라서 그렇지 않을까.. 하고 생각하고 대상 문장을 둘러싸는 기호를 홑따옴표에서 겹따옴표로 바꿔주고 ' 앞에 \ 를 붙여주니 잘 실행되네요.

find ./ -name "*.htm" -exec perl -pi -e "s/원본문자열/바뀔문자열/g" {} \;

혹시나 같은 이유로 삽질하시는 분이 계실까봐 올려봅니다. 바뀔문자열에 ' (홑따옴표) 가 포함되어 있다면 문장 전체를 둘러싸는 기호를 " (겹따옴표) 로 바꾸면 됩니다.
2009/04/30 13:25 2009/04/30 13:25

파일 내용 일괄 변경 기능

- perl을 사용합니다.

- 현재 디렉토리아래의 모든 html 파일안의 "www/zenon" 이라는 문구를 "www/dev/zenon"이라는 문구로 대체


find ./ -name "*.html" -exec perl -pi -e 's/www\/zenon/www\/dev\/zenon/g' {} \;



특정 파일 일괄 관리 기능
find . -name "*.pc" -print | xargs -l {} -t mv {} [옮길 폴더명]


조금 빠른 복사
tar cf - . | ( cd [옮길 폴더명] && tar xBf - )

2009/04/30 13:23 2009/04/30 13:23
C:\>wget --spider -S http://www.naver.com --> 헤더정보를 console에 뿌린다.
--15:04:28--  http://www.naver.com/
           => `index.html'
Resolving www.naver.com... done.
Connecting to www.naver.com[202.131.30.82]:80... connected.  --> IP는 202.131.30.82 다.
HTTP request sent, awaiting response...
 1 HTTP/1.1 200 OK
 2 Date: Fri, 30 Nov 2007 06:04:21 GMT   --> 메인페이지는 오늘 아침 6시 4분 21초에 업데이트 되었다.
 3 Server: Apache --> Naver는 메인페이지용 웹서버로 Apache를 쓰고 있다
 4 Cache-control: no-cache, no-store, must-revalidate
 5 Pragma: no-cache
 6 P3P: CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE" --> P3P를 쓰고 있다
 7 Connection: close
 8 Content-Type: text/html; charset=euc-kr  --> 캐릭터셋으로 euc-kr로 쓰고 있다.
200 OK

C:\>wget -O good.jpg http://www.hikr.org/files/33971.jpg --> url에서 파일을 다운로드 하여 good.jpg로 저장한다.
--15:08:51--  http://www.hikr.org/files/33971.jpg
           => `good.jpg'
Resolving www.hikr.org... done.
Connecting to www.hikr.org[88.198.38.81]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 121,292 [image/jpeg]

100%[====================================>] 121,292       44.08K/s    ETA 00:00

15:08:55 (44.08 KB/s) - `good.jpg' saved [121292/121292]
2009/04/30 11:21 2009/04/30 11:21
< Cygwin 홈페이지 > 이 주소의 시그윈 홈에 보면

Install or update
now!
(using setup.exe)


이런 곳이 있습니다. 'setup.exe를 사용해 인스톨/업데이트'하는 메뉴입니다. 그곳을 클릭하면 setup.exe 라는 조그만 파일이 다운로드됩니다. setup.exe 를 실행하면 인터넷 서버에서 실시간으로 파일을 받아오며 인스톨이 시작됩니다.

※ 시그윈은 무료이고 오픈소스입니다


인스톨 과정



* Install from Internet (인터넷으로부터 인스톨; 다운받은 파일들은 나중에 다시 사용할 수 있도록 지우지 않음)

* Download without Installing (필요한 파일을 다운로드만 하고, 인스톨은 하지 않음)

* Install from Local Directory (하드에 이미 다운받아 놓은 파일로 설치)

이런 옵션 대화상자가 나오는데, 처음 설치라면 Install from Internet (인터넷으로부터 인스톨) 을 선택합니다.



Select Root Install Directory (인스톨할 루트 디렉토리를 선택하세요) 라는 곳이 나오는데, 하드의 어디에 시그윈을 설치할지 물어보는 것입니다. 저의 경우
D:\cygwin
여기로 지정했습니다. 나머지는 기본값이 좋습니다.



Select Local Package Directory (설치 파일을 보관할 곳을 정하세요)

다운받은 시그윈 설치파일들을 지우지 않고 계속 보관할 폴더를 지정하는 곳입니다. 저의 경우에는
D:\Warehouse\cygwin_install_files
이런 폴더를 만들어서 지정해 주었습니다. 시그윈도 일종의 유닉스이기에, 디렉토리/파일명에는 공백문자가 들어가지 않는 것이 좋을 것 같습니다.



Select Your Internet Connection (인터넷 연결 방식을 선택하세요)

Direct Connection (직접 연결)을 선택했습니다.



Choose A Download Site (다운받을 사이트를 고르세요)

설치 파일들은 시그윈 홈페이지가 아닌 세계 각곳의 FTP 서버에 올려져 있습니다. 그래서 골라야 하는데, 서버에 따라 아주 느리거나 아예 다운로드가 안되는 경우가 많습니다.

예전에는 한국의 "리눅스사랑" 서버가 좋았는데 지금은 보이지 않습니다.

"초고속연구망 KREONET": ftp://ftp.kreonet.re.kr
여기가 속도도 빠르고 잘 되는군요. 아무튼 한국 서버에서 받는 것이 빠릅니다.



Select Packages (설치할 패키지를 고르세요)

이 부분이 좀 어렵습니다. 리눅스에 익숙하지 않다면 무엇을 설치해야 할지 알 수가 없을 것입니다. 시그윈은  Vim (VI; 빔)같은 에디터조차도 기본적으로는 설치해 주지 않습니다.

필요한 것이 있으면 나중에 추가 설치하면 되기에 그냥 기본값으로 설치하는 것이 좋습니다. "다음" 버튼을 누릅니다.


최소한의 파일만 설치했는데도 D:\cygwin 폴더가 50MB나 됩니다.


바탕화면에 만들어진 시그윈 아이콘을 클릭하면 시그윈이 실행됩니다.


실행 결과:
Administrator@chessman-dsjf2pe ~
$


이런 아주 썰렁한 프롬프트 한 개가 나올 것입니다. 그러나 이것이 정상입니다. 정확히 말하자면 이것은 Cygwin의 Bash Shell 입니다. 윈도우의 cmd.exe 와 같은 명령어 처리기입니다.

프롬프트를 이루는 Administrator 는 현재 사용자의 로그인 ID이고, chessman-dsjf2pe 는 컴퓨터 이름입니다. 이런 프롬프트는 변경할 수 있습니다.

아무튼 이것으로 설치는 완료되었습니다.

2009/04/29 21:35 2009/04/29 21:35
못말리는 삽질본능 !!!

textarea 에 VS수준의 인텔리센스 기능을 탑재시켜주는
야심찬 계획의 프로토타입 입니다

<%
set db = server.createobject("adodb.connection")
db.open application("connectionstring")
set rs = db.execute("select getdate() as current_time")
....
정도 구문은 무난하군요
2009/04/27 19:49 2009/04/27 19:49
간단히 설명드리자면 원격지의 컴퓨터를 컨트롤할 수 있는 툴입니다.
윈도우 2000부터 지원이 되기 시작 했고요 그냥 이것만 있으면 안되고 터미널서비
스가 설치 되어 있어야 원격지 컴퓨터를 컨트롤할 수 있습니다.
2009/04/27 19:47 2009/04/27 19:47
춘잡니다.

질문에 대한 해결책으로 만들다 보니 간략한  RSS리더가 되버렸네요.

RSS의 출력 XML형식은 표준이니 RSS리더 공부하시거나 원격지 서버의 XML Data를

핸들링 하는 법이 포함되어 있습니다.

지극히 간단한 코드이며 Javascript로 변환도 가능하지만 Javascript로 변환하게되면 IE전용으로 변쉰합니다.

DOM 선언 부분이 FF, IE, Opera 각가 다른 방법을 사용합니다.

일단 ASP로 리더를 한번 구현 해보시고 싶으시다면 참고해보시기 바랍니다.

소스에 있는 내용이 꼭 정답은 아닙니다.

XML DOM을 핸들링 하는 방법은 여러가지가 있기 때문이죠.

ChildNode, document.getElementTagName 와 같이 혼용할 수도 있습니다.

그럼~

PS. .net로 가게되면 거의 표준으로 코딩해야 합니다. ^^
2009/04/27 19:44 2009/04/27 19:44
ASP용 로그 기록 클래스

많은 개발자들이 개발을 하면서 중간 중간 소스에 Response.Write 변수 를 추가 합니다.

이유는 디버깅 용이죠! ^^

하지만, 개발 완료 후 삭제도 해야 하고 혹여나 깜빡하고서 누락하는 경우가 있는데요.

누락한 것 중 지저분 해지기만 하고 문제가 되진 않지만 어떤 사람들은 dB 커넥션 문자열을 찍어서

노출이 되는 경우도 있기도 합니다. ㅎㅎㅎ

공개 소스 중에는 Log4J라는 모듈이 있습니다만, 이건 JSP, Ruby, .Net 용으로만 있고 ASP용은 없지요.

그래서 아쉬운 대로 만들어 봤습니다.

제가 생각했을 때 이 클래스를 사용하므로서 얻을 수 있는 이득을 나열해 보죠.


1. 운영 중에도 에러나 기타 정보를 기록하여 디버깅 및 유지보수에 용의합니다.
2. 실수로 중요 정보가 외부에 노출되는 것을 방지합니다. (예: Response.Write에 의해)
3. 확장 함수를 이용하여 받아들인 파라미터 등을 기록하는 것이 가능합니다.
4. 로그 레벨을 이용 하여 기록 기준을 정의 할 수 있으므로 성능이 나빠지는 것에 대응 할 수 있습니다.
5. 파일에 기록이 되므로 언제든 역 추적이 가능합니다. ( 1번과 비슷 한 내용이네요 ^^ )

다음은 사용 예입니다.

<!--#include virtual="ClsLogger.asp"//-->
<%On Error Resume Next%>
<%
'// Logger
Dim oLog : Set oLog = New ClsLogger

'// Request Log
TraceRequestParameter oLog

'//      FATAL : 치명적 에러
oLog.Fetal "치명적 에러!!! 관리자 빨리 보삼. : " & Err.Description

'//      ERROR : 수행 가능한 정도의 에러
oLog.Error "또 에러냐!!! : " & Err.Description

'//      WARN : 문제를 일으킬 가능성의 정보
oLog.Warn "이건 귀찮아서 처릴 안했단 말이오!!! : "

'//      INFO : 정보를 나타낼 때 사용
oLog.Info "게시판 목록 시작"

'//      DEBUG : 상세 정보를 나타낼 때 사용
oLog.Debug "지금은 개발 중..."

If ( Err.Number = 0 ) Then
   oLog.Debug "완료"
Else
   oLog.Error Err.Description
End If


'------------------------------------------------------------------------------------
'// Request 객체의 파라미터 값을 로그에 기록한다.
'// 이 함수는 ClsLogger에 포함 시킬지 말지 고민중 ... ㅠㅠ
'------------------------------------------------------------------------------------
Sub TraceRequestParameter(ByRef pLog)

   On Error Resume Next

   Dim pContentType : pContentType = LTrim(Request.ServerVariables("CONTENT_TYPE"))

   If ( InStr(pContentType, "multipart/form-data") > 0 ) Then
      Exit Sub
   End If

   If ( Not IsObject(pLog) ) Then
      Exit Sub
   End If

   Dim z
   Dim pKeyName
   pLog.Debug "============= FORM PARAMETER ============="
   For z = 1 To Request.Form.Count
      pKeyName = Request.Form.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestForm(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.Form.Count
      pLog.Debug Request.Form.Key(z) & " : " & Request.Form(z)
   Next

   pLog.Debug "========== QUERYSTRING PARAMETER ========="
   For z = 1 To Request.QueryString.Count
      pKeyName = Request.QueryString.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestQuery(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.QueryString.Count
      pLog.Debug Request.QueryString.Key(z) & " : " & Request.QueryString(z)
   Next  
   pLog.Debug "=========================================="

   Err.Clear

   On Error GoTo 0

End Sub
%>

저의 경우 주로 .Error와 .Debug를 사용합니다.

일단 속는 셈 치고 한번 사용해보셔요. ^^

많은 분들이 자기가 원하던 거라고 하시더군요. 다행 다행.

아 그리고 로그뷰어는 "mtail" 이라는 프로그램을 이용합니다. 네이년에서 mtail로 검색을 하시면 쉽게 구 할 수 있어요.

간단하게 소개하면
   기록되는 로그를 실시간으로 모니터링 할 수 있고,
   필터링도 가능합니다. 이 필터링을 이용하면 Error만 볼수도 있고 Debug만 볼수도 있습니다.

유용한 프로그램이에요 ^^
 
그럼 사용해보시고 부족한 부분은 리플 달아주세요~
2009/04/27 19:43 2009/04/27 19:43
사진을 업로드 하면 ASP상에서 해당 이미지에 워터 마크를 입혀 주는 프로그램입니다.
서버에 설치되어서 돌아가는 응용프로그램인 관계로 서버 호스팅 받는 분들만 가능하네요.

아래는 원본 설명입니다.
====================================================
원본글 주소 :
http://dodam.egloos.com/1819734


워터마크 생성 프로그램


워터 마크를 생성해 넣는것이 다 유료라서..
그냥 하나 간단하게 만들어 버렸다.

기능 설명
1. 첨부파일을 서버에 설치한다.
2. 설치된 프로그램을 실행한다. WaterMak.exe
3. 워터 마크용 이미지를 불러온다. (투명처리될 부분은 0, 255, 0 칼라로 맞추어 놓는다. => 연두색)
- 투명처리될 부분은 ASP상에 업로드한 이미지가 보이며, 그이외의 부분은 워터마크의 이미지가 보여지게 된다.
4. dodamSocket.DLL파일을 서버에 등록한다. (구성서비스 이용해서 등록할것.)
4. ASP상에서 파일을 업로드 한다.
- 워터마크가 생성될 이미지를 만든다. (나누미 이미지 플러스 등 활용)
<%
set SendMSG = server.createobject("dodamSocket.SendMsg")
SendMSG.GetConnection = "10299" '// 워터마크 프로그램이 해당 포트로 접속대기중이다.
For i = 0 To 1000
If SendMSG.skState = "T" Then
SendMSG.Str = "MI¥c:\web\test.jpg£"
SendMSG.Str = "MI¥c:\web\test2.jpg£"
Exit For
End if
Next
Set SendMSG = Nothing
%>

이런식으로 웹페이지 상에서 호출을 해 준다.
set SendMSG = server.createobject("dodamSocket.SendMsg") => DLL객체를 생성한다.
SendMSG.GetConnection = "10299" => 서버에 설치해서 띄워 놓은 워터마크 생성 프로그램에 접속한다.
If SendMSG.skState = "T" Then => 소켓 연결이 되었다면...
SendMSG.Str = "MI¥c:\web\test.jpg£" => 워터마크를 넣을 업로드된 이미지의 경로를 넘겨 준다.
MI => MakeImage 명령어
¥ => 구분자
c:\web\test.jpg => 워터 마크를 넣을 원본 이미지 경로
£ => 전송 문자열의 끝임을 알려준다.

위의방식으로 호출을 하게 되면, 원본 이미지는 삭제가 되며
파일명은 동일하며, 확장자는 jpg인 파일이 동일 경로상에 생성이 된다.
ex)
test.jpg업로드시 => test.jpg (워터마크 없는 원본 이미지) 삭제 => test.jpg생성 저장(워터 마크 있는 이미지)
test.gif 업로드시 => test.gif (워터마크 없는 원본 이미지) 삭제 => test.jpg 생성 저장 (워터 마크 있는 이미지)

혹시 사용상의 문제점이 있으면 덧글 달아 주세요.....

2009/04/27 19:37 2009/04/27 19:37

WireFrame.ASP

asp.net 이 아닌 classic asp 용이며,
http://yoursite.com/?action/param1/param2 와 같은 형식의 url 을 분석하여,
Controller 에 등록된 Action Method 를 자동으로 실행해주는 간단한 Framework 입니다

vbscript 와 jscript 를 혼용했으며, mssql 기반의 간단한 Model 을 지원하며
DB 상의 Table 과 1:1 매치하는 Model 을 Table 명만으로 손쉽게 생성할 수 있습니다

js eval기반의 Template 을 지원합니다

WireFrame 이라는 이름이 말해주듯, Table 목록 조회 위주의 간단한 프로토타입 제작용으로 사용가능하며, 실서비스 개발에는 무리가 있습니다

저조차도 진짜 사용할지, 기능개선은 언제가 될지 모르겠습니다만, 오랜만에 재미있게 코딩한 것 같아서, 이곳에 올려둡니다

출처

2009/04/27 19:36 2009/04/27 19:36

사용자 삽입 이미지
무료메일서버를 찾는 많은 분들에게 쓸만하다 싶어 소개해 봅니다.

hMail Server는 SMTP, POP3, IMAP을 지원하는 윈도우 서버용 메일서버 이다.
윈도우용 무료 메일서버로 국내에는 알려지지 않은 메일서버이다.

홈페이지 : http://www.hmailserver.com/
다운로드 : http://www.hmailserver.com/?page=download
라이센스 : Freeware
플랫폼  : Windows, MySQL, MS SQL

아래 오픈소스 관련 사이트에서 설치 및 관리에 대한 간단한 설명 페이지를 볼수 있다.
http://www.jopenbusiness.com/mediawiki/index.php/HMail_Server_4.4.1

최신버전 5에서는 한글 지원이 아직 안되니 참고 하세요~.

사내 메일이나 소규모 에이전시등에서 사용한다면 최상의 메일서버가 아닐까 생각해본다.
hMail Server + MySQL + SquirrelMail(다람쥐메일php) 을 설치하면 웹메일도 운영가능하다.

PHP기반 관리자 사이트도 제공하고 있어 웹에서 메일서버 관리도 가능하다.
메일서버 소스 또한 제공하고 있고 메일관리툴이 VB로 제작되어 있다.
VB메일관리툴의 소스를 활용한다면 ASP에서도 관리 가능할것으로 생각된다.

ASP 관리모듈 또는 사이트, ASP 웹메일등 개발해 보면 재미 있지 않을까 생각해 본다.

---------------------------------------------------------------------------------------------

2009/04/27 19:34 2009/04/27 19:34
GeoIP 국가별 IP체크
http://www.maxmind.com/

국가별 IP체크 꼭 필요한 사항은 아니나 사이트 접속정보 구성시 고려해볼 만한 사항이며
로그분석 업체에서는 이미 사용중인 기능이기도 합니다.

로그분석에 어떤 국가의 IP인지 확인할 수 있다면 악의적인 IP의 접근 차단도 할수 있을것이며
인젝션 공격등 방어를 위해 특정 국가의 접속을 막을수도 있을 것입니다.

위 사이트에서는 데모 버전이 올라와 있습니다.
ASP 버전으로 데모버전에는 데모데이터를 활용하고 있습니다.
데모데이터를 실제 마지막으로 업데이트된 데이터로 교체하여 사용하시면 된답니다.

첨부파일에는 2009년 2월 데이터와 예제 프로그램이 있으니 필요하신 분은 첨부파일을 받아 사용하세요~

--------------------------------------------------------------------------------------------------------------------

사용법
1. GeoIPCOM.dll을 system32 폴더에 복사
2. regsvr32 GeoIPCOM.dll - 레지스트리에 DLL등록
3. ASP 프로그램에 적용

set geoip = Server.CreateObject("GeoIPCOM.GeoIP")

geoip.loadDataFile("C:\Program Files\GeoIP\GeoIP.dat")
country_code = geoip.country_code_by_name(hostname)
country_name = geoip.country_name_by_name(hostname)

--------------------------------------------------------------------------------------------------------------------

위 내용은 웹짱닷넷(www.webjjang.net) 자료실에도 등록되어 있습니다.
2009/04/27 19:32 2009/04/27 19:32
직접만든 컴퍼넌트입니다. 궁금한점은.. 그냥.그냥그냥.입니다.

안에 asp파일도 같이 있습니다.
페이지의 수행시간을 체크하는데 유용합니다. 무지 무지 가벼운 컴퍼넌트

Tm.setTimeStart() 시작
    <프로그램수행>
Tm.setTimeEnd() 끝

Tm.getTimeResult() 시작과 끝을 정확하게 계산한뒤에 값을 리턴합니다.

정확성 때문에 doubl값으로 넘어오는데
그냥 결과를 출력하면 1.02656598-3E 이렇게 출력되기 때문에
다음과 같이 해줬습니다.
FormatNumber(Tm.getTimeResult(),7)

그럼 ...
2009/04/27 19:31 2009/04/27 19:31
1. 소갯말
일단 버그 있을지도 모릅니다... ㅠㅠ

일단 XMLRPC부터 소개하자면
http://xmlrpc.com/
http://wiki.kldp.org/HOWTO//html/XML-RPC-HOWTO/xmlrpc-howto-intro.html

간단하게 MS의 SOAP과 유사하게,
'XML-RPC는 HTTP를 통한 간단하고 이식성 높은 원격 프로시져 호출 방법이다' 이라고 하네요
(제가 설명을 잘 못해서...)

일단 압축을 여시면 파일을 3가지가 있는데
class_xmlrpc.asp 이하 2가지 파일 (class_hashtable.asp / class_gto.asp) 은
의존성때문에 같이 넣어주어야 할껍니다 -.-;


2. 레퍼런스

- 생성자

   * Constructor void xmlRPC() - XMLRPC Class를 생성합니다.

- Properties

   * Public String method - XMLRPC 서버측 method를 지정해줍니다.

   * Public Mixed data - XMLRPC 서버에 보내줄 데이터를 지정하여 줍니다. 지정하는 순간 XMLRPC 문법에 맞
게 XML문서로 변환됩니다.

   * Public Boolean responseStatus - 데이터를 보낸 이후, 응답 상태를 나타냅니다. 문제가 있으면 false값

   * Public Array responseData - 데이터를 받고, ASP 데이터형태로 변환합니다.

- Methods

   * Public void send(url) - XMLRPC 서버쪽으로 데이터를 송신합니다.

   = Arguments

      * String url - 데이터를 송신할 XMLRPC 서버의 주소를 지정합니다.


3. 예제

 아래 예제는... 필자가 구축한 XMLRPC 서버에 데이터를 전송하여, 데이터를 읽어오는 예제입니다.
 video.ucc Method로 Argument로 받은 http://www.youtube.com/watch?v=eSnzCpdKXJ8
 아래 주소의 UCC 동영상에 대한 정보를 가져오는 부분입니다.

* 전달받은 원시 XMLRPC Response Data

<methodResponse>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>subject</name>
                  <value>
                     <string>Solitudes: Natural Relaxation - horizons</string>
                  </value>
               </member>
               <member>
                  <name>contents</name>
                  <value>
                     <string>Solitudes: Natural Relaxation - horizons ...</string>
                  </value>
               </member>
               <member>
                  <name>tag</name>
                  <value>
                     <string>Solitudes Natural Relaxation horizons</string>
                  </value>
               </member>
               <member>
                  <name>flash</name>
                  <value>
                     <string>http://www.youtube.com/v/eSnzCpdKXJ8&f=videos&app=youtube_gdata</string>
                  </value>
               </member>
               <member>
                  <name>thumb</name>
                  <value>
                     <string>http://i.ytimg.com/vi/eSnzCpdKXJ8/2.jpg</string>
                  </value>
               </member>
               <member>
                  <name>url</name>
                  <value>
                     <string>http://www.youtube.com/watch?v=eSnzCpdKXJ8</string>
                  </value>
               </member>
               <member>
                  <name>publisher</name>
                  <value>
                     <string>http://youtube.com</string>
                  </value>
               </member>
               <member>
                  <name>category</name>
                  <value>
                     <string>Music</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodResponse>

* 코드

<!-- #include virtual="/include/class_hashtable.asp" -->
<!-- #include virtual="/include/class_gto.asp" -->
<!-- #include virtual="/include/class_xmlrpc.asp" -->
<%
   Dim objRPC
   Set objRPC = New xmlRPC
   objRPC.method = "video.ucc"

   '// 전달할 데이터입니다. 어느 데이터형이라도 가능합니다.
   '// Object일 경우는 Scripting.Dictionary 또는 제가 만든 Hashtable (내부적으로는
Scripting.Dictionary ㅠㅠ) 만 가능합니다.
   objRPC.data = "http://www.youtube.com/watch?v=eSnzCpdKXJ8"
   objRPC.send("http://*******/api/")   '// 보안상 ^^;

   If objRPC.responseStatus = True Then
      '// XMLRPC Response를 받습니다. 보통 수신받는 변수는 한개일 경우가 대부분입니다.
      Dim objData : objRPC.responseData(0)

      '// 첫번째로 수신받은 데이터는 struct형으로 Hashtable로 변환되지만...
      '// Vbscript 문법상 문제때문에... 내부적으로 원소를 하나가진 배열로밖에 표현이 안됩니다.
      '// 이해해주세요 ㅠㅠ
      Dim curData : Set curData = objData(0)
   End If

   Set objRPC = Nothing

   Dim curKey
   For Each curKey In curData.Keys
      Response.Write curKey & " - " & curData.Item(curKey) & "<br />"
   Next
%>

* 결과

subject - Solitudes: Natural Relaxation - horizons
contents - Solitudes: Natural Relaxation - horizons ...
tag - Solitudes Natural Relaxation horizons
flash - http://www.youtube.com/v/eSnzCpdKXJ8&f=videos&app=youtube_gdata
thumb - http://i.ytimg.com/vi/eSnzCpdKXJ8/2.jpg
url - http://www.youtube.com/watch?v=eSnzCpdKXJ8
publisher - http://youtube.com
category - Music


4. 알려진 버그

VBScript의 문법의 문제상, 바로 변수에 Object (Hashtable 또는 Scripting.Dictionary) 데이터형을
정의하지 못해서 편법으로 0번째 원소를 가진 배열 만드는 방식으로 처리했습니다.

제가 설명을 잘 못해서... 이해하지 못하신 분들은
class_gto.asp 파일을 열어보시길 권합니다 -.-;
2009/04/27 19:30 2009/04/27 19:30
말은 거창하지만... 뜯어보면 별것 아닙니다 -.-;
설명이 뭐 필요하겠습니까 예제부터 보시죠

예제)
Dim objRS : Set objRS = New GDO
Dim objHash : Set objHash = New Hashtable
objHash.Define "title", "monoless 킹왕짱 미남!!"

Call objRS.ExecuteQuery("update taeyo_board set title=?", objHash)

Set objHash = Nothing
Set objRS = Nothing

예제 2)
Dim objRS : Set objRS = New GDO
Dim objHash : Set objHash = New Hashtable
objHash.Define "title", "monoless 킹왕짱 미남!!"

Dim objData : objData = objRS.OpenQuery("select * from taeyo_board where title=?", objHash)

If IsEmpty(objData) = False Then
       Dim curData
       For Each curData In objData
              Response.Write "Title : " & curData.Item("title") & "<br />"
              Response.Write "Name : " & curData.Item("name") & "<br />"
       Next
End If

Set objHash = Nothing
Set objRS = Nothing

생성자)
* [void] GDO() - GDO Class를 생성합니다.

Method)
* [void] ExecuteProc(proc, params) - 프로시져를 실행합니다.
 - [String] proc - 실행할 프로시져명
 - [Object Hashtable] params - 입력할 파라메터

* [void] ExecuteQuery(query, params) - 쿼리를 실행합니다.
 - [String] query - 실행할 쿼리
 - [Object Hashtable] params - 입력할 파라메터

* [Array] OpenProc(proc, params) - 프로시져를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반
환합니다.
 - [String] proc - 실행할 프로시져명
 - [Object Hashtable] params - 입력할 파라메터

* [Array] OpenQuery(query, params) - 쿼리를 실행합니다. 결과값은 Object Hashtable을 가진 배열로 반환
합니다.
 - [String] query - 실행할 쿼리
 - [Object Hashtable] params - 입력할 파라메터

Property)
* [String] ConnectString - 접속할 DB 연결구문입니다.
2009/04/27 19:29 2009/04/27 19:29
img_url = "http://~~~경로"

  Set xh = CreateObject("MSXML2.ServerXMLHTTP")
  xh.Open "GET", img_url, false
  xh.Send()
  imgData = xh.ResponseBody
  Set  xh = Nothing


  Set stm =CreateObject("ADODB.Stream")
  stm.open()
  stm.type=1
  stm.write imgData
  stm.SaveToFile 저장경로&저장할이름, 2
  stm.close()
  Set  stm = Nothing 

2009/04/27 19:24 2009/04/27 19:24

<?php

###############################################################
# Thumbnail Image Generator 1.23
###############################################################
# Visit http://www.zubrag.com/scripts/ for updates
###############################################################

// REQUIREMENTS:
// PHP 4.0.6 and GD 2.0.1 or later
// May not work with GIFs if GD2 library installed on your server
// does not support GIF functions in full

// Parameters:
// src - path to source image
// dest - path to thumb (where to save it)
// x - max width
// y - max height
// q - quality (applicable only to JPG, 1 to 100, 100 - best)
// t - thumb type. "-1" - same as source, 1 = GIF, 2 = JPG, 3 = PNG
// f - save to file (1) or output to browser (0).

// Sample usage:
// 1. save thumb on server
// http://www.zubrag.com/thumb.php?src=test.jpg&dest=thumb.jpg&x=100&y=50
// 2. output thumb to browser
// http://www.zubrag.com/thumb.php?src=test.jpg&x=50&y=50&f=0


// Below are default values (if parameter is not passed)

// save to file (true) or output to browser (false)
$save_to_file = true;

// quality
$image_quality = 100;

// resulting image type (1 = GIF, 2 = JPG, 3 = PNG)
// enter code of the image type if you want override it
// or set it to -1 to determine automatically
$image_type = -1;

// maximum thumb side size
$max_x = 100;
$max_y = 100;

// Folder where source images are stored (thumbnails will be generated from these images).
// MUST end with slash.
//$images_folder = '/home/images/';

// Folder to save thumbnails, full path from the root folder, MUST end with slash.
// Only needed if you save generated thumbnails on the server.
// Sample for windows:     c:/wwwroot/thumbs/
// Sample for unix/linux:  /home/site.com/htdocs/thumbs/
//$thumbs_folder = '/home/thumbs/';


///////////////////////////////////////////////////
/////////////// DO NOT EDIT BELOW
///////////////////////////////////////////////////

$to_name = '';

if (isset($_REQUEST['f'])) {
  $save_to_file = intval($_REQUEST['f']) == 1;
}

if (isset($_REQUEST['src'])) {
  $from_name = urldecode($_REQUEST['src']);
}
else {
  die("Source file name must be specified.");
}

if (isset($_REQUEST['dest'])) {
  $to_name = urldecode($_REQUEST['dest']);
}
else if ($save_to_file) {
  die("Thumbnail file name must be specified.");
}

if (isset($_REQUEST['q'])) {
  $image_quality = intval($_REQUEST['q']);
}

if (isset($_REQUEST['t'])) {
  $image_type = intval($_REQUEST['t']);
}

if (isset($_REQUEST['x'])) {
  $max_x = intval($_REQUEST['x']);
}

if (isset($_REQUEST['y'])) {
  $max_y = intval($_REQUEST['y']);
}

// Allocate all necessary memory for the image.
// Special thanks to Alecos for providing the code.
ini_set('memory_limit', '-1');

function SaveImage($type, $im, $filename, $quality, $to_file = true) {

  $res = null;

  // ImageGIF is not included into some GD2 releases, so it might not work
  // output png if gifs are not supported
  if(!function_exists('imagegif')) $type = 3;

  switch ($type) {
    case 1:
      if ($to_file) {
        $res = ImageGIF($im,$filename);
      }
      else {
        header("Content-type: image/gif");
        $res = ImageGIF($im);
      }
      break;
    case 2:
      if ($to_file) {
        $res = ImageJPEG($im,$filename,$quality);
      }
      else {
        header("Content-type: image/jpeg");
        $res = ImageJPEG($im,'',$quality);
      }
      break;
    case 3:
      if ($to_file) {
        $res = ImagePNG($im,$filename);
      }
      else {
        header("Content-type: image/png");
        $res = ImagePNG($im,'',$quality);
      }
      break;
  }

  return $res;

}

function ImageCreateFromType($type,$filename) {
 $im = null;
 switch ($type) {
   case 1:
     $im = ImageCreateFromGif($filename);
     break;
   case 2:
     $im = ImageCreateFromJpeg($filename);
     break;
   case 3:
     $im = ImageCreateFromPNG($filename);
     break;
  }
  return $im;
}

// generate thumb from image and save it
function GenerateThumbFile($from_name, $to_name, $max_x, $max_y) {

  global $save_to_file, $image_type, $image_quality;

  // if src is URL then download file first
  $temp = false;
  if (substr($from_name,0,7) == 'http://') {
    $tmpfname = tempnam("tmp/", "TmP-");
    $temp = @fopen($tmpfname, "w");
    if ($temp) {
      @fwrite($temp, @file_get_contents($from_name)) or die("Cannot download image");
      @fclose($temp);
      $from_name = $tmpfname;
    }
    else {
      die("Cannot create temp file");
    }
  }

  // get source image size (width/height/type)
  // orig_img_type 1 = GIF, 2 = JPG, 3 = PNG
  list($orig_x, $orig_y, $orig_img_type, $img_sizes) = GetImageSize($from_name);

  // should we override thumb image type?
  $image_type = ($image_type != -1 ? $image_type : $orig_img_type);

  // check for allowed image types
  if ($orig_img_type < 1 or $orig_img_type > 3) die("Image type not supported");
  
  if ($orig_x > $max_x or $orig_y > $max_y) {

    // resize
    $per_x = $orig_x / $max_x;
    $per_y = $orig_y / $max_y;
    if ($per_y > $per_x) {
      $max_x = $orig_x / $per_y;
    }
    else {
      $max_y = $orig_y / $per_x;
    }

  $max_x = $orig_x;
  $max_y = $orig_y;
 

  }
  else {
    // keep original sizes, i.e. just copy
    if ($save_to_file) {
      @copy($from_name, $to_name);
    }
    else {
      switch ($image_type) {
        case 1:
            header("Content-type: image/gif");
            readfile($from_name);
          break;
        case 2:
            header("Content-type: image/jpeg");
            readfile($from_name);
          break;
        case 3:
            header("Content-type: image/png");
            readfile($from_name);
          break;
      }
    }
    return;
  }

  if ($image_type == 1) {
    // should use this function for gifs (gifs are palette images)
    $ni = imagecreate($max_x, $max_y);
  }
  else {
    // Create a new true color image
    $ni = ImageCreateTrueColor($max_x,$max_y);
  }

  // Fill image with white background (255,255,255)
  $white = imagecolorallocate($ni, 255, 255, 255);
  imagefilledrectangle( $ni, 0, 0, $max_x, $max_y, $white);
  // Create a new image from source file
  $im = ImageCreateFromType($orig_img_type,$from_name);
  // Copy the palette from one image to another
  imagepalettecopy($ni,$im);
  // Copy and resize part of an image with resampling
  imagecopyresampled(
    $ni, $im,             // destination, source
    0, 0, 0, 0,           // dstX, dstY, srcX, srcY
    $max_x, $max_y,       // dstW, dstH
    $orig_x, $orig_y);    // srcW, srcH

  // save thumb file
  SaveImage($image_type, $ni, $to_name, $image_quality, $save_to_file);

  if($temp) {
    unlink($tmpfname); // this removes the file
  }
}

// generate
GenerateThumbFile($images_folder . $from_name, $thumbs_folder. $to_name, $max_x, $max_y);

?>

<?




exit;
function remote_image($urlstr){
  $url = parse_url($urlstr);
 

  $domain = str_replace("www.","",$url[host]);
  $ext = substr($urlstr,strrpos($urlstr,".") + 1);

  $string = "";

  $res = fsockopen("$domain", 80, $strErrorNo, $strErrStr, 2);

  if($res){
 
 
    $headerstr = "GET $urlstr HTTP/1.1\r\n";
    $headerstr.= "Host:$domain:80\r\n";
    $headerstr.= "\r\n";

    fputs($res, $headerstr);

    while (!feof($res)){
   
   $string.= fgets($res, 1024);
    }
    fclose($res);
  }

  if($ext == "gif")
    return substr($string,strpos($string,"GIF89a"));
  elseif($ext == "jpg" || $ext == "jpeg")
    return substr($string,strpos($string,"image/jpeg") + 14);
}

function image_save($file,$string){
  $fp = @fopen ($file,'w');
  if(!$fp) echo $file;

  fwrite ($fp,$string);
  fclose ($fp);
}


$col[14] = "http://image.gmarket.co.kr/service_image/2007/05/03/Admin_upload200753_165837.GIF";
$file1 = remote_image($col[14]);

          if($file1 && strpos($file1,"Not Found") < 1){
            $file_name = substr($col[14],strrpos($col[14],"/")+1);

            $file_first = substr($file_name,0,strrpos($file_name,"."));
            $file_last = substr($file_name,strrpos($file_name,".") + 1);
            $file_newname1 = "$file_first" . rand(100,999) . ".$file_last";
     
      image_save("$DOCUMENT_ROOT/a/$file_newname1",$file1);
          }




?>


<?


exit;?>

2009/04/27 19:24 2009/04/27 19:24
전 PHP에서 외부 웹페이지를 가져올 때 file_get_contents라는 함수를 즐겨쓰는데, 이 놈이 이미지까지 해결해 주더군요. 여기까진 다 아시겠고... :)

위 함수로 해결 안되는 것이 헤더인데요, 마임타입이라던지 잡다한 놈을 얻기 위해서 소켓을 열어서 헤더를 파싱해서 사용하시는 분이 많더군요(PHP Q&A게시판에서 자주 나온다고 할까나...)

1원짜리 팁은 바로 이것입니다.

$http_response_header

이 넘이 있다는 사실을 지금까진 몰랐는데, 상당히 재미있는 놈이더군요. 일단, PHP에서 미리 정의된 변수로, file_get_contents로 외부 페이지던 동영상이던 읽어오면 위 변수에는 헤더가 저장이 됩니다.

메뉴얼을 링크해놨는데, 뭐 이런 식으로 나온다고 하네요.

<?php
file_get_contents("http://example.com");
var_dump($http_response_header);
?>

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}

외부 이미지와 마임타입을 가져오기 위해서 다음과 같이 이용합니다.

$a = file_get_contents($imageUrl);
foreach($http_response_header as $item)
{
    if(preg_match('/Content-Type/', $item))
    {
        $contentType = trim(preg_replace('/.+:/', '', $item));
        continue;
    }
}
2009/04/27 19:22 2009/04/27 19:22
이 소스코드는 php 버전 5.x 이상에서 사용할수 있습니다

<?

// winamp 방송정보 클래스 정의문서를 포함시키기
include_once("class_cast_info.php");


//  winamp 방송정보 객체생성
$castObj = new winamp_cast_info();


// get_info() 메서드에 2번째인자에 1을 넣으면 청취자 관련 정보만 가져옴
$castObj->get_info("www.mukulcast.com");
//$castObj->get_info("sc20.saycast.com:8568",1);


echo "방송제목:", $castObj->info["Title"] , "<br>";
echo "방송장르:" , $castObj->info["Genre"] , "<br>";
echo "방송URL:" , $castObj->info["URL"] , "<br>";
echo "AIM:" , $castObj->info["AIM"] , "<br>";
echo "IRC채널:" , $castObj->info["IRC"] , "<br>";
echo "현재곡:" , $castObj->info["CurrentSong"] , "<br>";
echo "전송속도:" , $castObj->info["Kbps"] ,"<br>";


// 청취자 관련 요소들
echo "청취자수:" , $castObj->info["Listeners"] ,"<br>";
echo "최대청취가능인원:" , $castObj->info["MaxListeners"] , "<br>";
echo "최대청취자수:" , $castObj->info["ListenersPeak"] , "<br>";
echo "평균청취시간:" , $castObj->info["AverageListenTime"] , "<br>";


// get_info() 메서드에 1번째인자 방송주소가 www.mukulcast.com 이런형식이면 설정되는 요소
echo $castObj->real_ip , "<br>";
echo $castObj->real_port , "<br>";


/*

    세이케스트는 멀티서버로 되어 있으므로 청취자 인원을 정확히 가져오지 못합니다
    만약에 모든서버의 청취자 인원을 원하시면 아래처럼 하시면 됩니다(단! 모든방송서버의 주소를 알아야합니다)

    $castObj->get_info("sc20.saycast.com:8001",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc22.saycast.com:8003",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc24.saycast.com:8005",1);
    $total_Listeners += $castObj->info["Listeners"];

    $castObj->get_info("sc25.saycast.com:8007",1);
    $total_Listeners += $castObj->info["Listeners"];

    echo $total_Listeners;
    
    참고) 위에있는 주소는 설명을하기 위해서 임의로 작성된것입니다
    

*/


?>
2009/04/27 19:12 2009/04/27 19:12
음.. 브라우저별 핵. 뭐 꼼수죠? 어쨌든 정리했습니다.
참고용으로 하셔도 되고 실로 써먹어도 되겠지만..
우리나라 웹 현실에 쓸만한게 몇개나 있을까요?
어쨌든 착하게 정리했네요.

/***** 선택자 핵 ******/

/* IE 6 이상 */

* html #uno  { color: red }

/* IE 7 이상 */

*:first-child+html #dos { color: red }

/* IE 7 과 현대 브라우저 */

html>body #tres { color: red }

/* 현대 부라우저 (IE 7 빼고) */

html>/**/body #cuatro { color: red }

/* 오페라 9.27 이상 */

html:first-child #cinco { color: red }

/*사파리 */

html[xmlns*=""] body:last-child #seis { color: red }

/*사파리 3+, 크롬 1+, 오페라 9+, 불여우 3.5+ */

body:nth-of-type(1) #siete { color: red }

/* 사파리 3+, 크롬 1+,  오페라 9+, 불여우 3.5+ */

body:first-of-type #ocho {  color: red }

/* 사파리 3, 크롬 1+ */

@media screen and (-webkit-min-device-pixel-ratio:0) {

 #diez  { background: #FFDECE; border: 2px solid #ff0000  }

}

/***** 속성 핵 ******/

/* ie6 이상 */

#once { _color:blue }

/* ie7 이상 */

#doce { *color: blue } /* or #color:blue */

/* '현대 브라우저'는 IE8 을 포함합니다, 여기에 동의하던 말던.. :) */
2009/04/27 19:08 2009/04/27 19:08
팁이라기보단 참고정도로 봐주세요...^^;
prototypejs 를 이용하구요...일반적으로 사용하지 않는 분들도 테스트 해볼 수 있는 페이지를 따로 올려볼께욤 조만간에;;;
iframe resize 에 대해 질문도 많이 올라오고 해서 테스트 해보시라고 올립니다.

참고는 여기서...
http://ajaxstudy.net/demo/view.php?&uid=17&page=1

Event.observe(window,'load',function() {

    Event.observe('aa','load',function() {

        new ASiframeresize($('aa'));

    });

    new ASiframeresize($('aa'));

});

function ASiframeresize(el) {

    this.El = el;
    this.oldLocation = null;
    this.setCount = 0;
    this.maxCount = 10;
    this.setDelay = 200;
    this.setTimer = null;
    this.setup();


}

ASiframeresize.prototype = {

    setup : function() {

        var oThis = this;
        Event.observe(this.El.contentWindow.document,'mousedown', function(event) {

            if(Event.element(event).tagName.toLowerCase() != 'body') {

                if(oThis.setTimer) {
                    oThis.setCount = 0;
                    window.clearTimeout(oThis.setTimer);
                    oThis.setTimer = null;
                }
                oThis.resize();

            }

        });

        this.resize();

    },

    resize : function() {

        this.setCount++;

        if(this.El.contentWindow.document.body) {

            this.El.setStyle({
                
                height : this.El.contentWindow.document.body.offsetHeight + 'px'

            });

        } else {

            this.El.setStyle({
                
                height : this.El.contentWindow.document.documentElement.offsetHeight + 'px'

            });


        }
        this.move();

    },

    move : function() {

        if(this.setCount > this.maxCount) {

            this.setCount = 0;
            if(this.setTimer) {
                window.clearTimeout(this.setTimer);
                this.setTimer = null;
            }

        } else {

            var oThis = this;
            var fn = function(){ oThis.resize();}
            this.setTimer = window.setTimeout(fn,oThis.setDelay);

        }

    }

    

}

허접하지만 혹시라도 그럼^^;

출처: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=ajax&wr_id=893&page=1
2009/04/27 19:07 2009/04/27 19:07

String.prototype.trim = function() {

return this.replace(/^\s+|\s+$/g,"");

}

String.prototype.ltrim = function() {

return this.replace(/^\s+/,"");

}

String.prototype.rtrim = function() {

return this.replace(/\s+$/,"");

}

2009/04/21 10:57 2009/04/21 10:57

경고: 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. 필자는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다.

HKLMSystemCurrentControlSetServicesTcpipParameters
값 이름: SynAttackProtect
키: TcpipParameters
값 종류: REG_DWORD
유효 범위: 0,1
기본값: 0

이 레지스트리 값은 TCP(Transmission Control Protocol)가 SYN-ACKS의 재전송을 조정하도록 합니다. 이 값을 구성하면 SYN 공격(서비스 거부 공격의 한 종류) 동안 연결 응답이 더 빨리 시간 초과됩니다.

다음 매개 변수는 이 레지스트리 값과 함께 사용할 수 있습니다. ? 0(기본값): SYN 공격에 대한 일반적인 보호를 하려면 SynAttackProtect를 0으로 설정합니다.
1 : SYN 공격에 대하여 보다 높은 수준의 보호를 하려면 SynAttackProtect를 1로 설정합니다. 이 매개 변수는 TCP가 SYN-ACKS의 재전송을 조정하도록 합니다. SynAttackProtect를 1로 설정하는 경우 시스템에서 SYN 공격이 이루어지고 있음을 감지하면 연결 응답이 더 빨리 시간 초과됩니다. Windows는 공격이 진행 중인지 확인하기 위하여 다음 값을 사용합니다.

TcpMaxPortsExhausted
TCPMaxHalfOpen
TCPMaxHalfOpenRetried


값 이름: EnableDeadGWDetect
키: TcpipParameters
값 종류: REG_DWORD
유효 범위: 0, 1(False, True)
기본값: 1(True)

다음은 이 레지스트리 값과 함께 사용할 수 있는 매개 변수입니다. ? 1 : EnableDeadGWDetect를 1로 설정하면 TCP는 더 이상 작동하지 않는 게이트웨이를 검색할 수 있습니다. 더 이상 작동하지 않는 게이트웨이 감지가 사용되면 TCP는 여러 연결에 문제가 발생하는 경우 인터넷 프로토콜(IP)에 백업 게이트웨이를 변경하도록 요청할 수 있습니다. 백업 게이트웨이는 제어판의 네트워크 도구에 있는 TCP/IP 구성 대화 상자의 고급 섹션에서 정의됩니다.
0: EnableDeadGWDetect 값은 0으로 설정하는 것이 좋습니다. 0으로 설정하지 않으면 공격으로 인하여 서버가 강제로 원하지 않는 게이트웨이로 전환될 수 있습니다.

값 이름: EnablePMTUDiscovery
키: TcpipParameters
값 종류: REG_DWORD
유효 범위: 0, 1(False, True)
기본값: 1(True)

다음은 이 레지스트리 값과 함께 사용할 수 있는 매개 변수입니다. ? 1 : EnablePMTUDiscovery를 1로 설정하면 TCP는 최대 전송 단위(MTU)나 원격 호스트 경로에 대한 최대 패킷 크기를 검색하려 합니다. TCP는 경로의 MTU를 검색하고 TCP 세그먼트를 이 크기로 제한하여 경로에 있는 각자 다른 MTU로 네트워크에 연결하는 라우터에서 조각을 제거할 수 있습니다. 조각이 있으면 TCP 처리량에 좋지 않은 영향을 줍니다.
? 0 : EnablePMTUDiscovery는 0으로 설정하는 것이 좋습니다. 이렇게 하면 로컬 서브넷에서 호스트하지 않는 모든 연결에 576바이트의 MTU가 사용됩니다. 이 값을 0으로 설정하지 않으면 공격자가 강제로 MTU를 아주 작은 값으로 설정하여 스택의 부하가 커집니다.

값 이름: KeepAliveTime
키: TcpipParameters
값 종류: REG_DWORD - 시간(밀리초)
유효 범위: 1 - 0xFFFFFFFF
기본값: 7,200,000(2시간)

이 값은 TCP가 Keep Alive 패킷을 보내어 유휴 연결이 열려 있는지 확인하는 빈도를 결정합니다. 연결이 유지되어 있다면 원격 컴퓨터가 Keep-Alive 패킷을 인식합니다. Keep-Alive 패킷은 기본적으로 보내지지 않습니다. 연결에서 이 값을 구성하기 위한 프로그램을 사용할 수 있습니다. 권장값은 300,000(5분)입니다.

값 이름: NoNameReleaseOnDemand
키: NetbtParameters
값 종류: REG_DWORD
유효 범위: 0, 1(False, True)
기본값: 0(False)

이 값은 컴퓨터가 이름 해제 요청을 받을 때 NetBIOS 이름을 해제할지 여부를 결정합니다. 이 값은 관리자가 악의적인 이름 해제 공격으로부터 컴퓨터를 보호할 수 있도록 추가되었습니다. NoNameReleaseOnDemand 값은 1로 설정하는 것이 좋습니다.


DisableIPSourceRouting DWORD 2

IP 원본 라우팅은 데이터그램이 네트워크를 통해 취해야 할 IP 경로를 보낸 사람이 결정할 수 있도록 하는 메커니즘입니다.
보안 문제
공격자는 원본에서 라우팅한 패킷을 사용하여 ID와 위치를 모호하게 만들 수 있습니다.
패킷을 보내는 컴퓨터는 원본 라우팅을 통해 사용할 경로를 지정할 수 있습니다.
이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0, 1 또는 2, 기본값은 0(원본에서 라우팅한 패킷 확인됨)


TcpMaxConnectResponseRetransmissions DWORD 2

TcpMaxConnectResponseRetransmissions: SYN ? ACK retransmissions when a connection request is not acknowledged
이 항목은 SCE에서 MSS: SYN ? ACK retransmissions when a connection request is not acknowledged로 나타납니다. 이 매개 변수는 중단하기 전에 TCP에서 SYN을 재전송하는 횟수를 결정합니다. 재전송 제한 시간은 지정한 연결 시도에서 재전송이 연속될 때마다 두 배로 증가합니다. 초기 시간 제한 값은 3초입니다.

보안 문제
SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

대책
MSS: SYN ? ACK retransmissions when a connection request is not acknowledged의 값을 3 seconds, half?open connections dropped after nine seconds로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0?0xFFFFFFFF, 기본값은 2


TcpMaxDataRetransmissions DWORD 3

TcpMaxDataRetransmissions: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)
이 항목은 SCE에서 MSS: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)로 나타납니다. 이 매개 변수는 연결을 중단하기 전에 TCP에서 개별 데이터 세그먼트(연결되지 않은 세그먼트)를 재전송하는 횟수를 결정합니다. 재전송 제한 시간은 연결에서 재전송이 연속될 때마다 두 배로 증가하고 응답이 재개되면 다시 설정됩니다. 기본 제한 시간 값은 연결 시 측정된 Round-Trip Time에 따라 동적으로 결정됩니다.

보안 문제
SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

대책
MSS: How many times unacknowledged data is retransmitted (3 recommended, 5 is default)의 값을 3으로 구성하십시오. 이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0 ~ 0xFFFFFFFF, 기본값은 5


PerformRouterDiscovery DWORD 0

PerformRouterDiscovery: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)
이 항목은 SCE에서 MSS: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)로 나타납니다. 이 설정은 IRDP(Internet Router Discovery Protocol)의 사용 여부를 설정하는 데 사용됩니다. IRDP를 사용하면 시스템에서 기본 게이트웨이 주소를 자동으로 검색하고 구성할 수 있습니다.

보안 문제
같은 네트워크 세그먼트에서 시스템을 제어하는 공격자는 네트워크에서 컴퓨터가 라우터를 가장하도록 구성할 수 있습니다. 그러면 IRDP를 사용하도록 설정된 다른 컴퓨터에서 이미 손상된 시스템을 통해 트래픽을 라우팅하려고 시도할 수 있습니다.

대책
MSS: Allow IRDP to detect and configure Default Gateway addresses (could lead to DoS)의 값을 사용 안 함으로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 1 또는 0, 기본값은 0(사용 안 함)


TCPMaxPortsExhausted DWORD 5

TCPMaxPortsExhausted: How many dropped connect requests to initiate SYN attack protection (5 is recommended)
이 항목은 SCE에서 MSS: How many dropped connect requests to initiate SYN attack protection (5 is recommended)으로 나타납니다. 이 매개 변수는 SYN ? ATTACK 보호가 작동하기 시작하는 시점을 결정합니다. 사용 가능한 연결 백로그를 0으로 설정했기 때문에 시스템에서 TcpMaxPortsExhausted 연결 요청을 거부하면 SYN ? ATTACK 보호가 작동하기 시작합니다.

보안 문제
SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.

대책
MSS: How many dropped connect requests to initiate SYN attack protection (5 is recommended)의 값을 5로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0 ~ 0xFFFF, 기본값은 5


AFD 설정:

DynamicBacklogGrowthDelta

EnableDynamicBacklog
MinimumDynamicBacklog

MaximumDynamicBacklog
FTP 서버 및 웹 서버와 같은 Windows 소켓 응용 프로그램의 연결 시도는 Afd.sys에 의해 처리됩니다. Afd.sys는 합법적 클라이언트에 대한 액세스를 거부하지 않고 부분 공개 상태에서 여러 번의 연결을 지원하도록 수정되었습니다.
관리자가 동적 백로그를 구성할 수 있도록 함으로써 이러한 지원이 가능해졌습니다.
DynamicBacklogGrowthDelta는 연결이 더 필요할 때 만들 사용 가능 연결 수를 결정합니다. 값이 크면 free 연결 할당이 폭주할 수 있으므로 이 값을 주의하여 설정하십시오.
SYN 대규모 공격에서 공격자는 연속 SYN 패킷 스트림을 서버에 보내고 서버는 무력화되어 더 이상 합법적인 요청에 응답할 수 없을 때까지 부분 공개 연결을 열어 둡니다.


DisableIPSourceRouting
IP 원본 라우팅은 데이터그램이 네트워크를 통해 취해야 할 IP 경로를 보낸 사람이 결정할 수 있도록 하는 메커니즘입니다. 이 값을 2로 설정하면 원본에서 라우팅한 모든 들어오는 패킷이 삭제됩니다.
공격자는 원본에서 라우팅한 패킷을 사용하여 ID와 위치를 모호하게 만듭니다. 패킷을 보내는 컴퓨터는 원본 라우팅을 통해 취할 경로를 지정할 수 있게 됩니다.


PerformRouterDiscovery
이 매개 변수는 IRDP(Internet Router Discovery Protocol)를 지원하는 Windows 2000이 컴퓨터에서 기본 게이트웨이 주소를 자동으로 검색 및 구성하지 못하도록 하기 위해 설정됩니다.
같은 네트워크 세그먼트에서 시스템을 제어하는 공격자는 네트워크에서 컴퓨터가 라우터를 가장하도록 구성할 수 있습니다.
그러면 IRDP를 사용하도록 설정된 다른 컴퓨터에서 이미 손상된 시스템을 통해 트래픽을 라우팅하려고 시도할 수 있습니다.

자동 실행 사용 안 함: 모든 드라이브에 대해 자동 실행 사용 안 함
이 항목은 SCE에서 MSS: 모든 드라이브에 대해 자동 실행 사용 안 함으로 나타납니다. 자동 실행은 컴퓨터의 드라이브에 미디어가 삽입되는 즉시 읽기를 시작하는 기능입니다. 따라서 프로그램의 설치 파일과 오디오 미디어의 사운드가 즉시 시작됩니다.

다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesExplorer 레지스트리 키에 추가되었습니다.

표 5. 자동 실행을 사용하지 않도록 구성하기 위해 레지스트리에 추가된 설정

하위 키 레지스트리 값 항목 형식 권장 값(10진수)
NoDriveTypeAutoRun
DWORD
0xFF


다음 설정의 값을 1로 설정하여 CD/DVD 자동 실행만 사용할 수 없도록 할 수도 있습니다. 다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesCdrom 레지스트리 키에 추가되었습니다.

표 6. 자동 실행을 사용하지 않도록 구성하기 위해 레지스트리에 추가할 설정

하위 키 레지스트리 값 항목 형식 권장 값(10진수)
AutoRun
DWORD
0


보안 문제
미디어를 삽입할 때 악의적인 프로그램이 시작되지 않도록 하기 위해 그룹 정책을 통해 모든 드라이브에서 자동 실행을 사용하지 않도록 합니다.

시스템에 실제로 액세스할 수 있는 공격자는 자동 실행이 가능한 DVD 또는 CD를 컴퓨터에 삽입할 수 있으므로 이로 인해 악의적인 코드가 자동으로 시작됩니다. 이 악의적 프로그램에는 공격자가 원하는 모든 코드가 포함되어 있습니다.

화면 보호기 암호 보호 즉시 적용: 화면 보호기 유예 기간 만료 시간(초)(0 권장)
이 항목은 SCE에서 MSS: 화면 보호기 유예 기간 만료 시간(초)(0 권장)으로 나타납니다. Windows에는 화면 보호기 잠금이 활성화되어 있는 경우 화면 보호기가 실행된 후 실제로 콘솔이 자동으로 잠길 때까지의 유예 기간이 설정되어 있습니다.

다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINESYSTEMSoftwareMicrosoftWindows NTCurrentVersionWinlogon 레지스트리 키에 추가되었습니다.

표 7. 화면 보호기 암호 보호를 즉시 적용하기 위해 레지스트리에 추가된 설정

하위 키 레지스트리 값 항목 형식 권장 값(10진수)
ScreenSaverGracePeriod
String
0


보안 문제
화면 보호기 잠금이 실행되기 전에 사용자 동작에 허용된 기본 유예 기간은 5초입니다. 기본 유예 기간의 기본 설정을 그대로 유지하면 화면 보호기 잠금이 실행되기 전에 시스템에 로그온하기 위해 콘솔에 들어가는 사람으로부터 컴퓨터가 쉽게 공격을 받을 수 있습니다. 레지스트리 항목을 만들어 유예 기간을 조정할 수 있습니다.

대책
MSS: 화면 보호기 유예 기간 만료 시간(초)(0 권장)의 값을 0으로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0 ~ 255, 기본값은 5초

보안 로그 용량 경고: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값
이 항목은 SCE에서 MSS: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값으로 나타납니다. Windows Server 2003과 Windows 2000 서비스 팩 3에는 보안 로그가 사용자 정의된 임계값에 도달하면 보안 이벤트 로그에 보안 감사를 생성하는 새로운 기능이 포함되어 있습니다. 예를 들어 이 값이 90으로 설정된 경우에는 보안 로그가 용량의 90%에 도달하면 eventID 523에 대한 이벤트 항목과 보안 이벤트 로그가 90% 찼습니다.라는 텍스트가 표시됩니다.

참고: 필요에 따라 이벤트를 덮어쓰도록 보안 이벤트 로그를 구성한 경우에는 이 설정이 적용되지 않습니다.

다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesEventlogSecurity 레지스트리 키에 추가되었습니다.

표 8. 안전한 DLL 검색 모드를 사용할 수 있도록 레지스트리에 추가된 설정

하위 키 레지스트리 값 항목 형식 권장 값(10진수)
WarningLevel
DWORD
0


보안 문제
필요에 따라 이벤트를 덮어쓰도록 컴퓨터를 구성하지 않은 경우 보안 로그가 꽉 차면 최신 이벤트가 로그에 기록되지 않습니다. 보안 로그에 더 이상 이벤트를 기록할 수 없을 때 컴퓨터를 종료하도록 구성한 경우 로그가 꽉 차면 컴퓨터가 종료되고 네트워크 서비스를 더 이상 제공할 수 없게 됩니다.

대책
MSS: 시스템에서 경고를 생성할 보안 이벤트 로그 용량에 대한 백분율 임계값의 값을 90으로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 0 ~ 100, 기본값은 0(경고 이벤트가 생성되지 않음)

안전한 DLL 검색 순서 사용: 안전한 DLL 검색 모드 사용(권장)
이 항목은 SCE에서 MSS: 안전한 DLL 검색 모드 사용(권장)으로 나타납니다. 다음 두 가지 중 한 가지 방법으로 프로세스를 실행하여 요청된 DLL(동적 연결 라이브러리)을 검색하도록 DLL 검색 순서를 구성할 수 있습니다.

? 시스템 경로에 지정된 폴더를 먼저 검색한 다음 현재 작업 중인 폴더를 검색합니다.

? 현재 작업 중인 폴더를 먼저 검색한 다음 시스템 경로에 지정된 폴더를 검색합니다.


이 레지스트리 값은 1로 설정되어 있습니다. 이 경우 시스템에서는 시스템 경로에 지정된 폴더를 먼저 검색한 다음 현재 작업 중인 폴더를 검색합니다. 0으로 설정하면 시스템에서는 현재 작업 중인 폴더를 먼저 검색한 다음 시스템 경로에 지정된 폴더를 검색합니다.

다음과 같은 레지스트리 값 항목이 템플릿 파일의 HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetControlSession Manager 레지스트리 키에 추가되었습니다.

표 9. 안전한 DLL 검색 모드를 사용할 수 있도록 레지스트리에 추가된 설정

하위 키 레지스트리 값 항목 형식 권장 값(10진수)
SafeDllSearchMode
DWORD
0


보안 문제
사용자가 실수로 악성 코드를 실행하는 경우 이 코드가 수정된 버전의 시스템 DLL을 포함하여 추가 파일과 함께 패키지되어 있으면 해당 DLL의 고유 버전이 로드되어 코드에서 렌더링할 수 있는 손상 유형 및 정도가 커집니다.

대책
MSS: 안전한 DLL 검색 모드 사용(권장)의 값을 사용으로 구성하십시오.

이 레지스트리 값으로 사용할 수 있는 값은 다음과 같습니다.

? 1 또는 0, 기본값은 0

최종 로그온 사용자 이름 감추기
레지스트리를 아래와 같이 설정하여 최종 로그온 한 사용자의 이름을 감추십시오.

Win NT

하이브
HKEY_LOCAL_MACHINESOFTWARE


MicrosoftWindows NTCurrent VersionWinlogon

이름
DontDisplayLastUserName

형식
REG_SZ (Win 2000 > REG_DWORD)


1

win NT

공개 로컬 보안 인증(LSA)의 정보에 대한 액세스 제한

시스템의 모든 사용자를 식별하여, 익명 사용자를 제한하고 Windows NT Security Subsystem의 LSA 구성 요소에 대해 얻을 수 있는 공개 정보를 최소화해야 합니다. LSA는 로컬 컴퓨터의 액세스와 사용 권한을 포함한 보안 관리 항목을 처리합니다. 이 제한을 적용하려면 아래와 같이 레지스트리 항목을 만들고 설정하십시오. 하이브

HKEY_LOCAL_MACHINE SYSTEM


CurrentControlSetControlLSA


값 이름

RestrictAnonymous


종류

REG_DWORD


1

win 2000
RestrictAnonymous 레지스트리 값
레지스트리 편집기를 사용하여 다음 레지스트리 키를 보고 이 키에 다음 값을 추가하거나 값이 이미 있는 경우 값을 수정하십시오.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA
값: RestrictAnonymous
값 종류: REG_DWORD
값 데이터: 0x2(16진수)

윈도우 기본 공유 폴더 생성 또는 제거

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParametersAutoShareServer

AutoShareServer의 값을 0으로 한경우 재시작시 공유 만들지 않음.
1인경우 재시작시 공유 만들거나 복원.
출처 : [기타] 인터넷 : support.microsoft.com 검색 내용

2009/04/21 10:56 2009/04/21 10:56
2009/04/21 10:55 2009/04/21 10:55
--//SQL Database documentation script
--//Description: T-SQL script to generate the database document for SQL server 2000/2005

Declare @i Int, @maxi Int
Declare @j Int, @maxj Int
Declare @sr int
Declare @Output varchar(4000)
--Declare @tmpOutput varchar(max)
Declare @SqlVersion varchar(5)
Declare @last varchar(155), @current varchar(255), @typ varchar(255), @description varchar(4000)

create Table #Tables  (id int identity(1, 1), Object_id int, Name varchar(155), Type varchar(20), [description] varchar(4000))
create Table #Columns (id int identity(1,1), Name varchar(155), Type Varchar(155), Nullable varchar(2), [description] varchar(4000))
create Table #Fk(id int identity(1,1), Name varchar(155), col Varchar(155), refObj varchar(155), refCol varchar(155))
create Table #Constraint(id int identity(1,1), Name varchar(155), col Varchar(155), definition varchar(1000))
create Table #Indexes(id int identity(1,1), Name varchar(155), Type Varchar(25), cols varchar(1000))

 If (substring(@@VERSION, 1, 25 ) = 'Microsoft SQL Server 2005')
   set @SqlVersion = '2005'
else if (substring(@@VERSION, 1, 26 ) = 'Microsoft SQL Server  2000')
   set @SqlVersion = '2000'
else
   set @SqlVersion = '2005'


Print '<head>'
Print '<title>::' + DB_name() + '::</title>'
Print '<style>'
   
Print '      body {'
Print '      font-family:verdana;'
Print '      font-size:9pt;'
Print '      }'
     
Print '      td {'
Print '      font-family:verdana;'
Print '      font-size:9pt;'
Print '      }'
     
Print '      th {'
Print '      font-family:verdana;'
Print '      font-size:9pt;'
Print '      background:#d3d3d3;'
Print '      }'
Print '      table'
Print '      {'
Print '      background:#d3d3d3;'
Print '      }'
Print '      tr'
Print '      {'
Print '      background:#ffffff;'
Print '      }'
Print '   </style>'
Print '</head>'
Print '<body>'

set nocount on
   if @SqlVersion = '2000'
      begin
      insert into #Tables (Object_id, Name, Type, [description])
         --FOR 2000
         select object_id(table_name),  '[' + table_schema + '].[' + table_name + ']', 
         case when table_type = 'BASE TABLE'  then 'Table'   else 'View' end,
         cast(p.value as varchar(4000))
         from information_schema.tables t
         left outer join sysproperties p on p.id = object_id(t.table_name) and smallid = 0 and p.name = 'MS_Description'
         order by table_type, table_schema, table_name
      end
   else if @SqlVersion = '2005'
      begin
      insert into #Tables (Object_id, Name, Type, [description])
      --FOR 2005
      Select o.object_id,  '[' + s.name + '].[' + o.name + ']',
            case when type = 'V' then 'View' when type = 'U' then 'Table' end, 
            cast(p.value as varchar(4000))
            from sys.objects o
               left outer join sys.schemas s on s.schema_id = o.schema_id
               left outer join sys.extended_properties p on p.major_id = o.object_id and minor_id = 0 and p.name = 'MS_Description'
            where type in ('U', 'V')
            order by type, s.name, o.name
      end
Set @maxi = @@rowcount
set @i = 1

print '<table border="0" cellspacing="0" cellpadding="0" width="550px" align="center"><tr><td colspan="3" style="height:50;font-size:14pt;text-align:center;"><a name="index"></a><b>Index</b></td></tr></table>'
print '<table border="0" cellspacing="1" cellpadding="0" width="550px" align="center"><tr><th>Sr</th><th>Object</th><th>Type</th></tr>'
While(@i <= @maxi)
begin
   select @Output =  '<tr><td align="center">' + Cast((@i) as varchar) + '</td><td><a href="#' + Type + ':' + name + '">' + name + '</a></td><td>' + Type + '</td></tr>'
         from #Tables where id = @i
  
   print @Output
   set @i = @i + 1
end
print '</table><br />'

set @i = 1
While(@i <= @maxi)
begin
   --table header
   select @Output =  '<tr><th align="left"><a name="' + Type + ':' + name + '"></a><b>' + Type + ':' + name + '</b></th></tr>',  @description = [description]
         from #Tables where id = @i
  
   print '<br /><br /><br /><table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td align="right"><a href="#index">Index</a></td></tr>'
   print @Output
   print '</table><br />'
   print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Description</b></td></tr><tr><td>' + isnull(@description, '') + '</td></tr></table><br />'

   --table columns
   truncate table #Columns
   if @SqlVersion = '2000'
      begin
      insert into #Columns  (Name, Type, Nullable, [description])
      --FOR 2000
      Select c.name,
               type_name(xtype) + (
               case when (type_name(xtype) = 'varchar' or type_name(xtype) = 'nvarchar' or type_name(xtype) ='char' or type_name(xtype) ='nchar')
                  then '(' + cast(length as varchar) + ')'
                when type_name(xtype) = 'decimal' 
                     then '(' + cast(prec as varchar) + ',' + cast(scale as varchar)   + ')'
               else ''
               end           
               ),
               case when isnullable = 1 then 'Y' else 'N'  end,
               cast(p.value as varchar(8000))
            from syscolumns c
               inner join #Tables t on t.object_id = c.id
               left outer join sysproperties p on p.id = c.id and p.smallid = c.colid and p.name = 'MS_Description'
            where t.id = @i
            order by c.colorder
      end
   else if @SqlVersion = '2005'
      begin
      insert into #Columns  (Name, Type, Nullable, [description])
      --FOR 2005  
      Select c.name,
               type_name(user_type_id) + (
               case when (type_name(user_type_id) = 'varchar' or type_name(user_type_id) = 'nvarchar' or type_name(user_type_id) ='char' or type_name(user_type_id) ='nchar')
                  then '(' + cast(max_length as varchar) + ')'
                when type_name(user_type_id) = 'decimal' 
                     then '(' + cast([precision] as varchar) + ',' + cast(scale as varchar)   + ')'
               else ''
               end           
               ),
               case when is_nullable = 1 then 'Y' else 'N'  end,
               cast(p.value as varchar(4000))
      from sys.columns c
            inner join #Tables t on t.object_id = c.object_id
            left outer join sys.extended_properties p on p.major_id = c.object_id and p.minor_id  = c.column_id and p.name = 'MS_Description'
      where t.id = @i
      order by c.column_id
      end
   Set @maxj =   @@rowcount
   set @j = 1

   print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Table Columns</b></td></tr></table>'
   print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Datatype</th><th>Nullable</th><th>Description</th></tr>'
  
   While(@j <= @maxj)
   begin
      select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  upper(isnull(Type,'')) + '</td><td width="50px" align="center">' + isnull(Nullable,'N') + '</td><td>' + isnull([description],'') + '</td></tr>'
         from #Columns  where id = @j
     
      print    @Output   
      Set @j = @j + 1;
   end

   print '</table><br />'

   --reference key
   truncate table #FK
   if @SqlVersion = '2000'
      begin
      insert into #FK  (Name, col, refObj, refCol)
   --      FOR 2000
      select object_name(constid), s.name,  object_name(rkeyid) ,  s1.name 
            from sysforeignkeys f
               inner join sysobjects o on o.id = f.constid
               inner join syscolumns s on s.id = f.fkeyid and s.colorder = f.fkey
               inner join syscolumns s1 on s1.id = f.rkeyid and s1.colorder = f.rkey
               inner join #Tables t on t.object_id = f.fkeyid
            where t.id = @i
            order by 1
      end  
   else if @SqlVersion = '2005'
      begin
      insert into #FK  (Name, col, refObj, refCol)
--      FOR 2005
      select f.name, COL_NAME (fc.parent_object_id, fc.parent_column_id) , object_name(fc.referenced_object_id) , COL_NAME (fc.referenced_object_id, fc.referenced_column_id)    
      from sys.foreign_keys f
         inner  join  sys.foreign_key_columns  fc  on f.object_id = fc.constraint_object_id  
         inner join #Tables t on t.object_id = f.parent_object_id
      where t.id = @i
      order by f.name
      end
  
   Set @maxj =   @@rowcount
   set @j = 1
   if (@maxj >0)
   begin

      print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Refrence Keys</b></td></tr></table>'
      print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Reference To</th></tr>'

      While(@j <= @maxj)
      begin

         select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>[' + isnull(refObj,'N') + '].[' +  isnull(refCol,'N') + ']</td></tr>'
            from #FK  where id = @j

         print @Output
         Set @j = @j + 1;
      end

      print '</table><br />'
   end

   --Default Constraints
   truncate table #Constraint
   if @SqlVersion = '2000'
      begin
      insert into #Constraint  (Name, col, definition)
      select object_name(c.constid), col_name(c.id, c.colid), s.text
            from sysconstraints c
               inner join #Tables t on t.object_id = c.id
               left outer join syscomments s on s.id = c.constid
            where t.id = @i
            and
            convert(varchar,+ (c.status & 1)/1)
            + convert(varchar,(c.status & 2)/2)
            + convert(varchar,(c.status & 4)/4)
            + convert(varchar,(c.status & 8)/8)
            + convert(varchar,(c.status & 16)/16)
            + convert(varchar,(c.status & 32)/32)
            + convert(varchar,(c.status & 64)/64)
            + convert(varchar,(c.status & 128)/128) = '10101000'
      end
   else if @SqlVersion = '2005'
      begin
      insert into #Constraint  (Name, col, definition)
      select c.name,  col_name(parent_object_id, parent_column_id), c.definition
      from sys.default_constraints c
         inner join #Tables t on t.object_id = c.parent_object_id
      where t.id = @i
      order by c.name
      end
   Set @maxj =   @@rowcount
   set @j = 1
   if (@maxj >0)
   begin

      print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Default Constraints</b></td></tr></table>'
      print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Value</th></tr>'

      While(@j <= @maxj)
      begin

         select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="250px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>' +  isnull(definition,'') + '</td></tr>'
            from #Constraint  where id = @j

         print @Output
         Set @j = @j + 1;
      end

   print '</table><br />'
   end


   --Check  Constraints
   truncate table #Constraint
   if @SqlVersion = '2000'
      begin
      insert into #Constraint  (Name, col, definition)
         select object_name(c.constid), col_name(c.id, c.colid), s.text
            from sysconstraints c
               inner join #Tables t on t.object_id = c.id
               left outer join syscomments s on s.id = c.constid
            where t.id = @i
            and ( convert(varchar,+ (c.status & 1)/1)
               + convert(varchar,(c.status & 2)/2)
               + convert(varchar,(c.status & 4)/4)
               + convert(varchar,(c.status & 8)/8)
               + convert(varchar,(c.status & 16)/16)
               + convert(varchar,(c.status & 32)/32)
               + convert(varchar,(c.status & 64)/64)
               + convert(varchar,(c.status & 128)/128) = '00101000'
            or convert(varchar,+ (c.status & 1)/1)
               + convert(varchar,(c.status & 2)/2)
               + convert(varchar,(c.status & 4)/4)
               + convert(varchar,(c.status & 8)/8)
               + convert(varchar,(c.status & 16)/16)
               + convert(varchar,(c.status & 32)/32)
               + convert(varchar,(c.status & 64)/64)
               + convert(varchar,(c.status & 128)/128) = '00100100')

      end
   else if @SqlVersion = '2005'
      begin
      insert into #Constraint  (Name, col, definition)
         select c.name,  col_name(parent_object_id, parent_column_id), definition
         from sys.check_constraints c
            inner join #Tables t on t.object_id = c.parent_object_id
         where t.id = @i
         order by c.name
      end
   Set @maxj =   @@rowcount
  
   set @j = 1
   if (@maxj >0)
   begin

      print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Check  Constraints</b></td></tr></table>'
      print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Column</th><th>Definition</th></tr>'

      While(@j <= @maxj)
      begin

         select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="250px">' + isnull(name,'')  + '</td><td width="150px">' +  isnull(col,'') + '</td><td>' +  isnull(definition,'') + '</td></tr>'
            from #Constraint  where id = @j
         print @Output
         Set @j = @j + 1;
      end

      print '</table><br />'
   end


   --Triggers
   truncate table #Constraint
   if @SqlVersion = '2000'
      begin
      insert into #Constraint  (Name)
         select tr.name
         FROM sysobjects tr
            inner join #Tables t on t.object_id = tr.parent_obj
         where t.id = @i and tr.type = 'TR'
         order by tr.name
      end
   else if @SqlVersion = '2005'
      begin
      insert into #Constraint  (Name)
         SELECT tr.name
         FROM sys.triggers tr
            inner join #Tables t on t.object_id = tr.parent_id
         where t.id = @i
         order by tr.name
      end
   Set @maxj =   @@rowcount
  
   set @j = 1
   if (@maxj >0)
   begin

      print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Triggers</b></td></tr></table>'
      print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Description</th></tr>'

      While(@j <= @maxj)
      begin
         select @Output = '<tr><td width="20px" align="center">' + Cast((@j) as varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td></td></tr>'
            from #Constraint  where id = @j
         print @Output
         Set @j = @j + 1;
      end

      print '</table><br />'
   end

   --Indexes
   truncate table #Indexes
   if @SqlVersion = '2000'
      begin
      insert into #Indexes  (Name, type, cols)
         select i.name, case when i.indid = 0 then 'Heap' when i.indid = 1 then 'Clustered' else 'Nonclustered' end , c.name
         from sysindexes i
            inner join sysindexkeys k  on k.indid = i.indid  and k.id = i.id
            inner join syscolumns c on c.id = k.id and c.colorder = k.colid
            inner join #Tables t on t.object_id = i.id
         where t.id = @i and i.name not like '_WA%'
         order by i.name, i.keycnt
      end
   else if @SqlVersion = '2005'
      begin
      insert into #Indexes  (Name, type, cols)
         select i.name, case when i.type = 0 then 'Heap' when i.type = 1 then 'Clustered' else 'Nonclustered' end,  col_name(i.object_id, c.column_id)
            from sys.indexes i
               inner join sys.index_columns c on i.index_id = c.index_id and c.object_id = i.object_id
               inner join #Tables t on t.object_id = i.object_id
            where t.id = @i
            order by i.name, c.column_id
      end

   Set @maxj =   @@rowcount
  
   set @j = 1
   set @sr = 1
   if (@maxj >0)
   begin

      print '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Indexes</b></td></tr></table>'
      print '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Type</th><th>Columns</th></tr>'
      set @Output = ''
      set @last = ''
      set @current = ''
      While(@j <= @maxj)
      begin
         select @current = isnull(name,'') from #Indexes  where id = @j
               
         if @last <> @current  and @last <> ''
            begin  
            print '<tr><td width="20px" align="center">' + Cast((@sr) as varchar) + '</td><td width="150px">' + @last + '</td><td width="150px">' + @typ + '</td><td>' + @Output  + '</td></tr>'
            set @Output  = ''
            set @sr = @sr + 1
            end
        
           
         select @Output = @Output + cols + '<br />' , @typ = type
               from #Indexes  where id = @j
        
         set @last = @current   
         Set @j = @j + 1;
      end
      if @Output <> ''
            begin  
            print '<tr><td width="20px" align="center">' + Cast((@sr) as varchar) + '</td><td width="150px">' + @last + '</td><td width="150px">' + @typ + '</td><td>' + @Output  + '</td></tr>'
            end

      print '</table><br />'
   end

    Set @i = @i + 1;
   --Print @Output
end


Print '</body>'
Print '</html>'

drop table #Tables
drop table #Columns
drop table #FK
drop table #Constraint
drop table #Indexes
set nocount off

2009/04/21 10:53 2009/04/21 10:53