'Linux'에 해당되는 글 76건

  1. 2010/11/06 visualp 404에러페이지 설정 - 아파치 httpd.conf | APACHE
  2. 2010/10/12 visualp (리눅스) - iptables 접속 차단 스크립트
  3. 2010/10/02 visualp linux 시간 설정
  4. 2010/07/12 visualp tomcat, mod-jk 설정
  5. 2010/07/12 visualp sulinux 8080포트 열기
  6. 2010/07/06 visualp [linux] - simbol link 정리
  7. 2010/05/26 visualp 하노이탑 최소 이동 횟수
  8. 2010/05/19 visualp linux directory size
  9. 2010/05/18 visualp write error in swap file
  10. 2010/05/10 visualp 아파치 퍼미션 문제 403

오라클 설치

Linux RSS Icon ATOM Icon 2012/02/02 13:20 visualp

1. http://www.oracle.com 에 접속

   -> Oracle Database 10g Express Edition for Linux x86 클릭

   -> oracle-xe-10.2.0.1-1.0.i386.rpm 다운로드


2. 설치 필요 라이브러리 설치

   -> yum install glibc

   -> yum install libaio


3. 오라클 rpm 설치

    -> rpm -ivh oracle-xe-10.2.0.1-1.0.i386.rpm


-> 삭제  rpm -e oracle-xe-univ-10.2.0.1-1.0
 

4. 오라클 설정

   -> /etc/init.d/oracle-xe configure

   # Specify a port that will be used for the database listener [1521]: 오라클포트번호   

   # This can be done after initial configuration: Confirm the password: SYS 또는 SYSTEM 암호

   # Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: 부팅후 자동 오라클을 실행할지 여부

 

5. 오라클 환경변수 설정

   -> cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin

   -> ./oracle_env.sh        (실행)


6. 부팅후 자동 환경변수 실행

   -> vim /root/.bash_profile

   # /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/./oracle_env.sh   (삽입)

   # export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server  (삽입)

   # export ORACLE_SID=XE


7. 웹브라우저 접속

   -> http://서버아이피:8080/apex

   -> 아이디 : sys  패스워드 : 위 4번 오라클설정에서 넣었던 sys 암호

7.1 oci 라이브러리 추가

    -> yum install php-pear

    -> pecl install oci8

    # php.ini 에서

    -> extension=oci8.so

7.2 아파치 설치후 다음작업

    -> /usr/local/apache/bin/./apachectl stop

8. php 설치

   -> export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server 

   # php 소스 컴파일 디렉토리에서

   -> ./configure --prefix=~~~~ --enable-pdo --with-pdo-oci=$ORACLE_HOME --with-oci8=$ORACLE_HOME --with-oracle=$ORACLE_HOME

   # 나머진 기존 php 설치법대로 진행


8.1 아파치 시작

   -> /usr/local/apache/bin/./apachectl start


9. 테스트 (PHP)

   $conn=oci_connect("아이디","패스워드","localhost/XE");
   if($conn) echo "success";



참고)

  # 오라클 시작

  -> /etc/init.d/oracle-xe start

  # 오라클 정지

  -> /etc/init.d/oracle-xe stop

  # 외부네트워크망에서 http://서버아이피:8080/apex 접속하게 하려면

  -> ./sqlplus system/패스워드

  -> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

2012/02/02 13:20 2012/02/02 13:20
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/451

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/451

jobs  : 현재 백그라운드로 돌아가는 프로그램 리스트

fg : 백그라운드로 실행되는 프로그램을 포그라운드

& :  프로세스를 백그라운드로 실행


예)

#>  top &                << top을 백그라운드로 실행

#>   jobs                   << 백그라운드로 실행되는 프로그램을 확인

[1]+  Stopped                 top
#>   fg %1                 << 백그라운드로 실행되는 top명령을 다시 불러움

nohup /usr/local/java/bin/java -jar XDreamyi3shop.jar &

nohup -> 터미널에서 로그아웃을 해도 실행시킨 프로그램은 종료되지 않고 계속 돈다.
& -> 백그라운드 실행.. ps -aux를 치면.. 프로그램이 돌고 있음을 알 수 있다.

2012/01/19 18:12 2012/01/19 18:12
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/447

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/447

#!/bin/bash
# For RedHat and cousins:
# chkconfig: 2345 85 85
# description: Red5 flash streaming server
# processname: red5
# Created By: Sohail Riaz (sohaileo@gmail.com)

PROG=red5
RED5_HOME=/usr/local/red5
DAEMON=$RED5_HOME/$PROG.sh
PIDFILE=/var/run/$PROG.pid

# Source function library
. /etc/rc.d/init.d/functions

[ -r /etc/sysconfig/red5 ] && . /etc/sysconfig/red5

RETVAL=0

case "$1" in
	start)
	echo -n $"Starting $PROG: "
	cd $RED5_HOME
	$DAEMON >/dev/null 2>/dev/null &
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		echo $! > $PIDFILE
		touch /var/lock/subsys/$PROG
	fi
	[ $RETVAL -eq 0 ] && success $"$PROG startup" || failure $"$PROG startup"
	echo
	;;
	stop)
	echo -n $"Shutting down $PROG: "
	killproc -p $PIDFILE
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
	;;
	restart)
	$0 stop
	$0 start
	;;
	status)
	status $PROG -p $PIDFILE
	RETVAL=$?
	;;
	*)
	echo $"Usage: $0 {start|stop|restart|status}"
	RETVAL=1
esac

exit $RETVAL

2012/01/12 17:16 2012/01/12 17:16
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/442

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/442

[apache]외부링크 금지

Linux RSS Icon ATOM Icon 2011/12/05 13:48 visualp

[원문] : http://laim.egloos.com/2198389


오늘은 무단링크를 방지하는 스크립트를 설치했다.

무단링크라... 무단링크는 이런 것이다. 퍼스널디비에서 계정을 받았다. 거기에 파일을 올리고는 그 파일을 다른 게시판에서 다음과 같이 올린다.
<a href="http://fileserver1.personaldb.net/****">파일링크</a>

이렇게 하면 다른 사람들이 이 파일을 가져갈 수 있게 된다.

하지만 이러면 퍼스널디비는 단지 자신의 서버와 네트워크를 빌려줄 뿐 아무런 이득을 얻지 못한다. 심지어 그 파일을 받아가는 사람도 이 파일이 어디에서 왔는지 알지 못한다. 그래서 시스템관리자는 무단 링크를 방지하기 위하여 여러가지 방법을 사용하게 된다.

제일 좋은 방법은 이런식의 파일접근을 원천적으로 막는 것이다. http://~~ 이런 방식으로 아예 파일에 접근할 수 없도록 웹서버에 파일을 올려놓지 않으면 된다. 필요하면 내부에서 파일을 읽어서 다시 외부로 뿌려주는 방식을 취하는 것이다. 많은 수의 다운로드 자료실들이 이러한 형태를 취한다. 제일 좋다.

하지만 홈페이지 서비스를 하는 경우에는 이것이 좀 어렵다. 기술적으로도 좀 어렵지만 가장 큰 문제는 사용자가 엄청 불편해지고, 시스템이 많은 자원을 소비한다.

그래서 차선책이 바로 Referer를 사용한 무단링크 방지책이다.

가장 많이 사용되는 아파치 웹서버의 경우 Referer를 사용한 무단링크방지법을 제공한다.
간단하게 다음과 같은 내용을 httpd.conf 파일에 추가하면 된다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</Directory>

설명은 다음과 같다.
<Directory "/home/dduma"> : 여기 쓰인 디렉토리에 대해서는
AllowOverride None : htacess.conf 파일을 사용하지 않는다.
SetEnvIf Referer abc.com in HTTP_REFER : HTTP_REFER 라는 변수에 넣는다.
Order deny,allow : 먼저 거부조건을 나중에 허용조건을 설정한다.
Deny from all : 모두 거부한다.
Allow from env=HTTP_REFER : HTTP_REFER 변수에 있는 것만 허용한다.

이러면 abc.com 만 빼고는 다 무단링크는 허용되지 않는다.


하지만 이렇게 하면 문제가 생긴다.
먼저 abc.com에서 링크된 것은
<img src=http://abc.com/test.gif>와 같이 그림을 링크하면 나타나지만
<a href=http://abc.com/test.exe>다운받아라</a> 와 같이 다운받을 수 있게 하면 모두 허용이 거부된다.

이것을 방지하기 위하여 다음을 넣자.
SetEnvIf Referer ^$ in HTTP_REFER
그러면 다운도 되고 다 잘 된다.


그럼 끝인가?
아니다. 이러면 아직 두가지 문제점이 남는다.

첫번째 문제는 다운받을 수 있도록 무단링크를 걸었을 때 마우스 왼쪽버튼으로 클릭하면 허용거부라는 메세지가 나오지만 마우스 오른쪽 버튼을 클릭하여 다운받기를 누르면 다운이 허용된다.
이것은 열심히 궁리한 결과 절대 막을 수 없다는 결론이 나왔다. 이것을 막으면 위에 언급한 것처럼 정상적으로 링크하고 다운받는 것도 금지되기 때문이다.

두번째 문제는 만일 검색엔진 같은 곳에 링크가 되어 있으면 역시 허용이 거부된다. (왜? 무단링크니까...)
하지만 우리는 검색엔진에 링크거는 것은 허용하고 싶다. (이걸 허용하지 않는 바보가 어딨냐?)
그래서 위의 것들을 다음과 같이 고쳤다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
SetEnvIf Referer ^$ in HTTP_REFER
<FilesMatch ".(avi|mge?g|exe|jpe?g|mp3|gif|png|zip|asx|asf|wmv|wma|bmp)$">
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</FilesMatch>
</Directory>

즉 중간에 FilesMatch 어쩌고 하는 지시자가 들어갔다.
이것은 쓰여진 확장자만을 무단링크 방지 파일대상으로 삼는다. 그러니까 .htm 파일같은 것은 무단으로 링크가 걸려도 좋다는 뜻이다.
이렇게 하면 검색엔진에 등록되어도 허용이 거부되지 않는다.

이상 무단링크 방지하기 방법을 알아보았다. 하지만 역시 완전하지는 않네... 몇가지 허점이 눈에 띈다. 이것을 알면 사람들이 악용할 소지가 전혀 없는 것은 아니다. 하지만 이 정도로도 무단링크의 90%정도는 없어진다.

시스템 관리자들은 모두 한번씩 해보시기를...

2011/12/05 13:48 2011/12/05 13:48
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/430

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/430

#!/bin/sh
cd /backup/home/weekly
tar cvfzp home.tar.gz --exclude=/home/no_backup /home
2011/10/26 08:49 2011/10/26 08:49
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/417

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/417

[apache] 외부링크 금지

Linux RSS Icon ATOM Icon 2011/05/26 14:50 visualp

[원문] - http://www.21-japan.com/?document_srl=26832

아파치외부링크금지 

오늘은 무단링크를 방지하는 스크립트를 설치했다.

무단링크라... 무단링크는 이런 것이다. 퍼스널디비에서 계정을 받았다. 거기에 파일을 올리고는 그 파일을 다른 게시판에서 다음과 같이 올린다.
<a href="http://fileserver1.personaldb.net/****">파일링크</a>

이렇게 하면 다른 사람들이 이 파일을 가져갈 수 있게 된다.

하지만 이러면 퍼스널디비는 단지 자신의 서버와 네트워크를 빌려줄 뿐 아무런 이득을 얻지 못한다. 심지어 그 파일을 받아가는 사람도 이 파일이 어디에서 왔는지 알지 못한다. 그래서 시스템관리자는 무단 링크를 방지하기 위하여 여러가지 방법을 사용하게 된다.

제일 좋은 방법은 이런식의 파일접근을 원천적으로 막는 것이다. http://~~ 이런 방식으로 아예 파일에 접근할 수 없도록 웹서버에 파일을 올려놓지 않으면 된다. 필요하면 내부에서 파일을 읽어서 다시 외부로 뿌려주는 방식을 취하는 것이다. 많은 수의 다운로드 자료실들이 이러한 형태를 취한다. 제일 좋다.

하지만 홈페이지 서비스를 하는 경우에는 이것이 좀 어렵다. 기술적으로도 좀 어렵지만 가장 큰 문제는 사용자가 엄청 불편해지고, 시스템이 많은 자원을 소비한다.

그래서 차선책이 바로 Referer를 사용한 무단링크 방지책이다.

가장 많이 사용되는 아파치 웹서버의 경우 Referer를 사용한 무단링크방지법을 제공한다.
간단하게 다음과 같은 내용을 httpd.conf 파일에 추가하면 된다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</Directory>

설명은 다음과 같다.
<Directory "/home/dduma"> : 여기 쓰인 디렉토리에 대해서는
AllowOverride None : htacess.conf 파일을 사용하지 않는다.
SetEnvIf Referer abc.com in HTTP_REFER : HTTP_REFER 라는 변수에 넣는다.
Order deny,allow : 먼저 거부조건을 나중에 허용조건을 설정한다.
Deny from all : 모두 거부한다.
Allow from env=HTTP_REFER : HTTP_REFER 변수에 있는 것만 허용한다.

이러면 abc.com 만 빼고는 다 무단링크는 허용되지 않는다.

하지만 이렇게 하면 문제가 생긴다.
먼저 abc.com에서 링크된 것은
<img src=http://abc.com/test.gif>와 같이 그림을 링크하면 나타나지만
<a href=http://abc.com/test.exe>다운받아라</a> 와 같이 다운받을 수 있게 하면 모두 허용이 거부된다.

이것을 방지하기 위하여 다음을 넣자.
SetEnvIf Referer ^$ in HTTP_REFER
그러면 다운도 되고 다 잘 된다.

그럼 끝인가?
아니다. 이러면 아직 두가지 문제점이 남는다.

첫번째 문제는 다운받을 수 있도록 무단링크를 걸었을 때 마우스 왼쪽버튼으로 클릭하면 허용거부라는 메세지가 나오지만 마우스 오른쪽 버튼을 클릭하여 다운받기를 누르면 다운이 허용된다.
이것은 열심히 궁리한 결과 절대 막을 수 없다는 결론이 나왔다. 이것을 막으면 위에 언급한 것처럼 정상적으로 링크하고 다운받는 것도 금지되기 때문이다.

두번째 문제는 만일 검색엔진 같은 곳에 링크가 되어 있으면 역시 허용이 거부된다. (왜? 무단링크니까...)
하지만 우리는 검색엔진에 링크거는 것은 허용하고 싶다. (이걸 허용하지 않는 바보가 어딨냐?)
그래서 위의 것들을 다음과 같이 고쳤다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
SetEnvIf Referer ^$ in HTTP_REFER
<FilesMatch ".(avi|mge?g|exe|jpe?g|mp3|gif|png|zip|asx|asf|wmv|wma|bmp)$">
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</FilesMatch>
</Directory>

즉 중간에 FilesMatch 어쩌고 하는 지시자가 들어갔다.
이것은 쓰여진 확장자만을 무단링크 방지 파일대상으로 삼는다. 그러니까 .htm 파일같은 것은 무단으로 링크가 걸려도 좋다는 뜻이다.
이렇게 하면 검색엔진에 등록되어도 허용이 거부되지 않는다.

이상 무단링크 방지하기 방법을 알아보았다. 하지만 역시 완전하지는 않네... 몇가지 허점이 눈에 띈다. 이것을 알면 사람들이 악용할 소지가 전혀 없는 것은 아니다. 하지만 이 정도로도 무단링크의 90%정도는 없어진다.

시스템 관리자들은 모두 한번씩 해보시기를...

2011/05/26 14:50 2011/05/26 14:50
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/382

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/382

cp 명령어 /

Linux RSS Icon ATOM Icon 2011/02/23 03:44 visualp

cp -rf --reply=yes  ~~~~~~~~~
cp -rf -replay=no  ~~~~~~~

덮어 씌위기 할 때 Y  누를 필요 없음.

2011/02/23 03:44 2011/02/23 03:44
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/358

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/358

리눅스에서 문자열 치환

Linux RSS Icon ATOM Icon 2010/11/19 05:14 visualp
linux에서 특정 문자열을 치환하는방법에는 여러가지가 있는데 

나는 다음과 같은 명령어로 해보았다.

(치환 결과를 다른 파일에 저장해야 할 때)

$ cat {SOURCE_FILE_NAME} | sed 's/{ORIGINAL}/{CHANGE}/g' > {NEW_FILE_NAME}

(치환 결과를 원본에 저장할때)

$ sed -i 's/{ORIGINAL}/{CHANGE}/g' {FILE_NAME}


{ORIGINAL} : 원본 문자열
{CHANGE}  : 바뀔 문자열


p.s {} 는 보기 편하라고 넣은거지 진짜로 저 괄호로 감싸서 넣지 마라.
2010/11/19 05:14 2010/11/19 05:14
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/333

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/333

[원문 ] - http://towons.kr/blog/2

경우에 따라, 404에러에 대해 아파치가 기본적으로 보여주는 에러페이지가 아닌, 개별적인 커스터마이징을
하고자 하는 경우가 생기게 마련인데..
이때는 /etc/httpd/conf/httpd.conf 를 열어서 아래와 같이 바꿔주시기 바랍니다.

httpd.conf

<VirtualHost *>
    DocumentRoot /home/domain
    ServerName domain.co.kr
    ServerAlias www.domain.co.kr
    ErrorDocument 404 /home/domain/error404.php
</VirtualHost>

버추어호스트에 물려놓은 도메인마다 개별 설정하는게 좋습니다. 서버에 물려 있는 모든 도메인에 동일한 404를
보여주려는 목적이라면 그냥 기본 404에러페이지를 쓰는 것도 나쁘지 않으니깐요.

남은 일은 error404.php 라는 파일을 만들어서 서버에 올려두는 일뿐입니다.

error404.php
<html>
<body>
잘못 찾아오셨습니다.<br>You got 404 Error!!!! orz
</body>
</html>

404에러가 났을때 만약 에러페이지로 보내지 않고, index.html 과 같은 메인페이지로 보내고 싶다면
ErrorDocument 404 /home/domain/error404.php 를
2010/11/06 19:53 2010/11/06 19:53
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/322

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/322

#!/bin/sh

# 초기화
iptables -F

# 포트 스캔 방지
iptables -A INPUT -d 0.0.0.0/0 -p icmp -j DROP

# DoS 공격 방지
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 12/second --limit-burst 24 -j RETURN
iptables -A syn-flood -j DROP

# ssh 정책(root, webpage 계정만 접속 가능)
# ssh 포트 : 22, root 번호: 0, webpage 번호:500
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 500 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 500 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 500 -j DROP
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 500 -j DROP

# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 15 --name HTTP -j DROP

#--------------------------------------------------------------------
# 커널 컴파일 및 iptables 패치 후, connlimit 사용이 가능한 경우
# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
#iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -connlimit-mask 24 -j DROP

#메일서버의 경우 동시에 5개이상 SMTP 접근일 경우 5분동안 접근 제한
#iptables -A INPUT -m recent --name spammer --rcheck --seconds 300 -j DROP
#iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name spammer --set -j DROP
#---------------------------------------------------------------------

#----------------------------------------------------------------------
# STRING 필터기능
# MSN 문자열이 들어간 패킷 차단
#iptables -A FORWARD -m string --string "messenger.msn.com" -j DROP

# 싸이월드 접속차단
#iptables -A FORWARD -p tcp --dport 80 -m string --string "Host: cyworld.nate.com" -j DROP
#----------------------------------------------------------------------

# 서버가 해킹당했을 때 DoS공격지로 사용될 경우에 적용.
# DNS 쿼리 이외 UDP 패킷 전송 방지
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP


스크립트 실행 후

# service iptables save

# service iptables restart


당연한 이야기지만, 이 스크립트는 root 권한으로 실행시켜야 한다.
시스템이 부팅될 때 이를 실행하고자 한다면, /etc/rc.local 에 등록해두자.

이를 해제하기 위해서는

iptables -F
iptables -F syn-flood
iptables -X syn-flood


[원문] - http://adminplay.com/board/?mid=Lsecurity&page=1&document_srl=12226
2010/10/12 11:29 2010/10/12 11:29
TAG
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/319

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/319