BLOG ARTICLE 개발 | 82 ARTICLE FOUND
- 2010.01.26 iBatis JDBC 설정.
- 2010.01.25 System.out Redirect
- 2010.01.14 CVS 계정생성 / Telnet Command Shell 예제
- 2009.12.11 log4 properties 경로설정.
- 2009.11.06 TCP/IP 상태 다이어그램
1. System.out -> 특정 Output Stream 전달.
PrintStream ps = new PrintStream(new FileOutputStream("d:\\result.txt", true));
System.setOut(ps);
System.out.println("test string");
ps.close();
2. 파이프 이용
PipedOutputStream pout = new PipedOutputStream();
PipedInputStream pin = new PipedInputStream(pout);
PrintStream ps1 = new PrintStream(pout);
System.setOut(ps1);
System.out.println("test string");
byte[] data = new byte[pin.available()];
pin.read(data, 0, data.length);
//System.out 쓴 녀석이 pipe out으로 나가고 그 녀석을 pin에서 읽어와서 파일에 기록.
PrintStream ps2 = new PrintStream(new FileOutputStream("d:\\log.txt", true));
ps2.write(data, 0, data.length);
CVS 계정생성
-------------------------------------------------------
계정으로 사용할 이름과 패스워드 생성
$htpasswd -n username<ENTER>
2회 패스워드 입력
$vi CVSROOT/passwd
passwd파일에 username:passwd:group 쓰고 저장.
Telnet command 처리 예제
-------------------------------------------------------
입력파일 형식
00101234567890->LL이후 데이터
OR
GET /context HTTP/1.0\n\n
등 귀찮을 때 한번씩 써먹을 수 있을듯..
-------------------------------------------------------
#!/bin/bash
func(){
sleep 1;
printf "`cat ${CMD_FILE}`";
sleep 1;
}
CMD_FILE=${1};
PORT=포트번호
ADDR=접속주소
RESULT_LOG=${CMD_FILE}.result
TMP_FILE=${CMD_FILE}.tmp
if [ $# = 0 ];
then
printf "input cmd file\n";
exit;
fi;
func | telnet ${ADDR} ${PORT} > ${TMP_FILE}
printf "\n\n`date`" >> ${RESULT_LOG}
cat ${TMP_FILE} >> ${RESULT_LOG}
cat ${TMP_FILE}
printf "\n\n"
rm ${TMP_FILE}
1) org.apache.log4j.PropertyConfigurator.configure(filepath);
or
2) -Dlog4j.configuration=filepath
or (Web App의 경우)
3)WEB-INF/classes 밑에 log4j.properties
출처 및 참조: 자바서비스넷(이원영), 블로그(프론티어), 티스토리(천검)
host A host B
| |
connect() LISTEN
| SYN |
|--------------------------->|
SYN_SENT |
| SYN |
|<---------------------------|
ESTABLISHED SYN_RECV NOTE: incomplete connection
| | queue
| |
| ACK |
|--------------------------->|
| ESTABLISHED
| || |
host A host B
| |
ESTABLISHED ESTABLISHED
| |
close() |
| |
FIN_WAIT_1 |
| FIN_ACK |
|--------------------------->|
CLOSING CLOSE_WAIT
| |
| ACK |
|<---------------------------|
FIN_WAIT_2 |
. .
. .
. .| (DATA) | 이 단계에서는 DATA 를 보낼 수도 있고, 그렇지 않을
|<---------------------------| 수도 있습니다.
| |
. .
. .
TIME_WAIT .
. .
. close()
| |
| FIN_ACK |
|<---------------------------|
TIMED_WAIT LAST_ACK
| ACK |
|--------------------------->|
(CLOSEED) (CLOSED)
- 정상이 아닌 상태
- SYNC_RECV
- LISTEN하는 서버쪽에서 나타나며 SYN를 받고 이에대한 SYN를 보냈으나 ACK를
받지 못한 상태
- 정상적인 접속 요청이 아닌 flood 어택인 경우 혹은 remote가 보낸 ACK
세그멘트가 유실된 경우
- CLOSE_WAIT
- remote의 FIN을 받아는데도 local에서 close()를 호출하지 않은 상태
- 현재 local이 CLOSE_WAIT라는 것은 read()호출시 리턴값이 -1으로 알 수 있다.
- FIN_WAIT_1
- local에서 close()를 호출했는데 이에 대한 ACK를 받지 못한 상태.
- ACK 세그먼트의 유실이 원인
- FIN_WAIT_2
- local에서 close()를 호출했으나, remote에서 close()를 하지 않은 경우
- TIME_WAIT
- 갯수가 적은것은 정상
- 갯수가 많을 경우는 FIN_WAIT_2에서 전이한 것으로, FIN_WAIT_2와 원인이 같다.- 다시 짤막 정리
- CLOSE_WAIT : local에서 close() 안한것.
- FIN_WAIT_2, 다수의 TIME_WAIT : remote에서 close() 안한것
- 이외 : 세그먼트의 유실(네트워크 문제) 혹은 어택
- 상태 정리
- SYNC_SENT : local에서 connect()를 호출하고 SYN을 못받은 상태
- SYNC_RECV : LISTEN 상태의 local에서 SYN을 받고,
이에 대한 SYN를 보냈으나 ACK를 받지 못한 상태
- CLOSE_WAIT : local에서 FIN을 받았는데도 close()를 호출하지 않은것이다.
- FIN_WAIT_1 : local에서 close()를 호출했는데, remote로 부터
ACK를 받지 못한것. 네트워크 문제
- FIN_WAIT_2 : local에서 close()를 호출했는데, remote가 close()를
호출하지 않은것
- TIME_WAIT : FIN_WAIT_2에서 일정시간 이후의 상태
* TIME_WAIT는 정상적으로 발생할 수 있으나, 그 수가 많은 경우는 FIN_WAIT_2에서
전이한것이다.- from man netstat
ESTABLISHED
The socket has an established connection.
SYN_SENT
The socket is actively attempting to establish a connection.
SYN_RECV
A connection request has been received from the network.
FIN_WAIT1
The socket is closed, and the connection is shutting down.
FIN_WAIT2
Connection is closed, and the socket is waiting for a shutdown
from the remote end.
TIME_WAIT
The socket is waiting after close to handle packets still in
the network.
CLOSED
The socket is not being used.
CLOSE_WAIT
The remote end has shut down, waiting for the socket to close.
LAST_ACK
The remote end has shut down, and the socket is closed.
Waiting for acknowledgement.
LISTEN
The socket is listening for incoming connections.
CLOSING
Both sockets are shut down but we still don't have all
our data sent.
UNKNOWN
The state of the socket is unknown.=====================================================================