2017년 12월 26일 화요일

Mysql 암호화, 복호화

 
#암호화
INSERT INTO 테이블명 (컬럼1) VALUES (HEX(AES_ENCRYPT('문자열', SHA2('My secret passphrase',512))));

#복호화
SELECT CAST(AES_DECRYPT(UNHEX(컬럼1), SHA2('My secret passphrase',512)) as char) FROM 테이블명;
OR
#복호화
SELECT CONVERT(AES_DECRYPT(UNHEX(컬럼1), SHA2('My secret passphrase',512)) USING utf8) FROM 테이블명;

 

CAST나 CONVERT으로 형변환 하는 부분 때문에 한참 해맸다.
대부분의 블로그가 형변환을 안 써 놨다.(심지어 공식 사이트 에서도...)

암복호화 함수의 리턴값은 BINARY 이기 때문에 HEX를 사용하지 않으면 필드 타입을 BINARY 저장이 가능한 타입으로 지정해야 된다. 공식문서는 BLOB을 추천한다고...

문제는 BINARY타입으로 지정시 일반 문자열 저장이 안되는 문제가 있기 때문에 필드타입을 VARCAHR로 사용하고 HEX를 사용하여 저장이 가능 하도록 한다.

 

MySQL 5.6이상부터 변경 가능.
암호화 모드 확인
select @@block_encryption_mode

암호화 모드 변경
SET block_encryption_mode = 'aes-256-cbc';#기본값 aes-128-ecb

암호화 모도는 처음부터 확인. 중간에 바뀌면 골치 아파진다.

2017년 12월 18일 월요일

svnadmin: E140001: 잘못된 덤프 파일 헤더

svnadmin: E140001: 잘못된 덤프 파일 헤더

윈도우에 설치된 visualsvn 에서
리눅스 svnserve로 옮기려고 할 때
발생하는 에러이다.

원인은 인코딩 문제라고 한다.
왜 이런 에러가 나냐면 command로 덤프 파일을 생성하지 않고,
Repository 의 우측 클릭 후 Backup Repository로 덤프를 생성하였기 때문이다.

command로 덤프를 생성하면 linux svnserve에서 에러 없이 제대로 올라 간다.

2017년 11월 30일 목요일

mybatis List객체에 제대로 select 데이터를 못 가져오는 경우.

기본적으로 mybatis 사용시 select 데이터는 아래와 같이 리스트로 받는다.

List<ConfirmingReceiptT> result2 = service.selectListConfirmingReceiptT(map);



이걸 객체에 List 변수로 받고자 하면 아래와 같이 한다.
public class GetConfirmingReceiptListResponseT {

@XmlElement(name = "ConfirmingReceipt")
protected List<ConfirmingReceiptT> confirmingReceipt;
...



여기서 문제가 발생.
최상위 객체인 GetConfirmingReceiptListResponseT의 confirmingReceipt에 내용이 담기지 않는 문제가 발생.

대략 일주일 정도 삽질 한 결과 최상위 객체에 달랑 List 변수 하나만 있으면 mybatis가
이걸 인식을 못한다.

해결책은 필요는 없지만 result를 한개더 추가 해 준다.

해결한 resultMap
<resultMap type="kr.co.auction.schema.arche_apisvc.ConfirmingReceiptT" id="ConfirmingReceiptT">
  <result property="receiptStatus" column="receiptStatus" />
  <result property="sellingType" column="SELLINGTYPE" />
  <result property="paymentTimeLimit" column="paymentTimeLimit" />
  <association property="orderBase" javaType="kr.co.auction.schema.arche_apisvc.OrderBaseT" >
   <id property="itemID" column="itemID" />
   <result property="orderNo" column="orderNo" />
   <result property="itemName" column="itemName" />
   <result property="awardQty" column="awardQty" />
   <result property="awardAmount" column="awardAmount" />
   <result property="deliveryFeeAmount" column="deliveryFeeAmount" />
   <result property="buyerName" column="buyerName" />
   <result property="buyerID" column="buyerID" />
   <result property="groupOrderSeqno" column="groupOrderSeqno" />
   <result property="requestOption" column="requestOption" />
   <result property="requestOptionPrice" column="requestOptionPrice" />
   <result property="sellerStockCode" column="sellerStockCode" />
   <result property="orderDate" column="orderDate" />
  </association>
  <association property="addressBase" javaType="kr.co.auction.schema.arche_apisvc.AddressBaseT" >
   <result property="name" column="name" />
   <result property="tel" column="tel" />
   <result property="mobileTel" column="mobileTel" />
   <result property="email" column="email" />
   <result property="postNo" column="postNo" />
   <result property="addressPost" column="addressPost" />
   <result property="addressDetail" column="addressDetail" />
   <result property="addressRoadName" column="addressRoadName" />
  </association>

</resultMap>


<resultMap type="kr.co.auction.schema.arche_apisvc.GetConfirmingReceiptListResponseT" id="GetConfirmingReceiptListResponseT" autoMapping="true">
 <result column="ADDUSERCD"  /><!-- temp, collection 한개만 있으면, List객체로 반환이 안됨. -->
 <collection property="confirmingReceipt" ofType="kr.co.auction.schema.arche_apisvc.ConfirmingReceiptT" resultMap="ConfirmingReceiptT" />
</resultMap>

2017년 11월 28일 화요일

mybatis 에서 association를 사용하면 중복 제거 문제.

mybatis 에서 association를 사용하면 중복된 값이 출력되지 않는 문제가 있다.
<resultMap type="kr.co.auction.schema.arche_apisvc.ConfirmingReceiptT" id="ConfirmingReceiptT" >
  <result property="receiptStatus" column="RECEIPTSTATUS" />
  <result property="sellingType" column="SELLINGTYPE" />
  <result property="paymentTimeLimit" column="PAYMENTTIMELIMIT" />
  <association property="orderBase" javaType="kr.co.auction.schema.arche_apisvc.OrderBaseT" >
   <result property="itemID" column="ITEMID" />
   <result property="orderNo" column="ORDERNO" />
   <result property="itemName" column="ITEMNAME" />
   <result property="awardQty" column="AWARDQTY" />
   <result property="awardAmount" column="AWARDAMOUNT" />
   <result property="deliveryFeeAmount" column="DELIVERYFEEAMOUNT" />
   <result property="buyerName" column="BUYERNAME" />
   <result property="buyerID" column="BUYERID" />
   <result property="groupOrderSeqno" column="GROUPORDERSEQNO" />
   <result property="requestOption" column="REQUESTOPTION" />
   <result property="requestOptionPrice" column="REQUESTOPTIONPRICE" />
   <result property="sellerStockCode" column="SELLERSTOCKCODE" />
   <result property="orderDate" column="ORDERDATE" />
  </association>
  <association property="addressBase" javaType="kr.co.auction.schema.arche_apisvc.AddressBaseT" >
   <result property="name" column="NAME" />
   <result property="tel" column="TEL" />
   <result property="mobileTel" column="MOBILETEL" />
   <result property="email" column="EMAIL" />
   <result property="postNo" column="POSTNO" />
   <result property="addressPost" column="ADDRESSPOST" />
   <result property="addressDetail" column="ADDRESSDETAIL" />
   <result property="addressRoadName" column="ADDRESSROADNAME" />
  </association>

</resultMap>

예를 들어 위와 같은 resultMap이 있을 경우, RECEIPTSTATUS, SELLINGTYPE, PAYMENTTIMELIMIT 3개의 필드의 내용이 모두 같을 경우는 총 row가 10개든, 100개든 한개의 row만 출력된다.

검색하면 <result 를 <id 로 바꾸라는 내용이 있는데, 이건 중복체크에 사용할 필드를 지정하는 것이다. <id로 지정시에는 해당 필드만 중복체크에 사용한다.

<result를 사용하면 나처럼 모두 비교한다.
나의 경우는 id 역할을 하는 필드(ex.primari key)가 없어서 문제가 된다.

해결책은 여기서 찾았다.
association을 쓰지 말라는 거다.
어떻게 보면 더 깔끔한 것 같기도 하다.
아무튼 아래와 같이 변경하면 중복된 내용을 제외하고 않고 전체를 잘 가져온다.
<resultMap type="kr.co.auction.schema.arche_apisvc.ConfirmingReceiptT" id="ConfirmingReceiptT" >
  <result property="receiptStatus" column="RECEIPTSTATUS" />
  <result property="sellingType" column="SELLINGTYPE" />
  <result property="paymentTimeLimit" column="PAYMENTTIMELIMIT" />
  <result property="orderBase.itemID" column="ITEMID" />
  <result property="orderBase.orderNo" column="ORDERNO" />
  <result property="orderBase.itemName" column="ITEMNAME" />
  <result property="orderBase.awardQty" column="AWARDQTY" />
  <result property="orderBase.awardAmount" column="AWARDAMOUNT" />
  <result property="orderBase.deliveryFeeAmount" column="DELIVERYFEEAMOUNT" />
  <result property="orderBase.buyerName" column="BUYERNAME" />
  <result property="orderBase.buyerID" column="BUYERID" />
  <result property="orderBase.groupOrderSeqno" column="GROUPORDERSEQNO" />
  <result property="orderBase.requestOption" column="REQUESTOPTION" />
  <result property="orderBase.requestOptionPrice" column="REQUESTOPTIONPRICE" />
  <result property="orderBase.sellerStockCode" column="SELLERSTOCKCODE" />
  <result property="orderBase.orderDate" column="ORDERDATE" />
  <result property="addressBase.name" column="NAME" />
  <result property="addressBase.tel" column="TEL" />
  <result property="addressBase.mobileTel" column="MOBILETEL" />
  <result property="addressBase.email" column="EMAIL" />
  <result property="addressBase.postNo" column="POSTNO" />
  <result property="addressBase.addressPost" column="ADDRESSPOST" />
  <result property="addressBase.addressDetail" column="ADDRESSDETAIL" />
  <result property="addressBase.addressRoadName" column="ADDRESSROADNAME" />

</resultMap>

2017년 11월 24일 금요일

리눅스 ls 자주 쓰는 옵션 정리.

-l 옵션이 있어야 되는 옵션도 있고, 없어도 되는 옵션도 있지만
기본적으로 전부 붙임. 더 자세한 건 man
#디렉토리만
ls -d */
ls -l | grep `^d'

#파일만
ls -l | egrep -v '^d'


#파일 크기별 (큰 파일부터...)
ls -lS

#파일 크기별 역순(작은 파일 부터...)
ls -lSr


#일자 전체 출력
ls --full-time
ls -l --time-style=full-iso


#크기를 읽기 좋게(e.g., 1K 234M 2G)
ls -lh

#하위 디렉토리 포함
ls -lR


 

timestamp별 정렬
#접속일자 순
ls -ult

#접속일자 역순(-r 옵션이 순서를 reverse함)
ls -ultr


#변경일자 순
ls -clt

#변경일자 역순(-r 옵션이 순서를 reverse함)
ls -cltr


#수정일자 순
ls -lt

#수정일자 역순(-r 옵션이 순서를 reverse함)
ls -ltr

접속일자, 수정일자, 변경일자가 뭔지는 여기서 확인.

리눅스의 timestamp

리눅스의 timestamp는 3가지가 있다.

예전 글에도 ctime과 mtime의 차이점에 대해 썼었는데, 그에 대한 연장선이다.

Access(atime) - 파일을 마지막으로 읽은 시간
Modify(mtime) - 파일 내용이 마지막으로 바뀐 시간
Change(ctime) - 파일의 메타 데이터가 마지막 으로 변경된 시간 (e.g. 권한)

 

stat 명령어로 timestamp를 확인 할 수 있다.

toucth 명령어로 test.txt 파일을 하나 생성 후 확인
[root@df test]# touch test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:36:11.380000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:36:11.380000000 +0900
Birth: -

처음 생성시 Access, Modify, Change가 모두 동일 한 걸 볼 수 있다.

 

touch 명령어로 Access 수정 후 확인.
[root@df test]# touch -a -d '1 Jan 2000 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:39:18.467000000 +0900
Birth: -

 

touch 명령어로 Modify 수정 후 확인.
[root@df test]# touch -m -d '1 Jan 2006 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:39:52.616000000 +0900
Birth: -

 

권한 변경후 확인(Change)
[root@df test]# chmod 777 test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -

 

cat 명령어로 해당 파일을 읽어 확인.
[root@df test]# cat test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -

Access 만 변경 된 걸 볼 수 있다.

 

echo 명령어로 내용 추가 후 확인.
[root@df test]# echo test >> test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 5 Blocks: 8 IO Block: 4096 일반 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2017-11-23 17:50:20.241000000 +0900
Change: 2017-11-23 17:50:20.241000000 +0900
Birth: -

Access는 그대로, Modify와 Change가 같이 변했다.

 

그니까 find로 파일 내용이 변경된 파일을 찾으려면 mtime을 이용해야 한다.
# 수정한지 20일 이상( -mtime +20 )된 파일과 디렉토리
find . -mtime +20 -ls

2017년 11월 21일 화요일

공격 아이피 iptable 등록 스크립트.

mail log를 점검하다 보니, 지속적으로 접근시도하는 부분이 보인다.

보안장비를 사용하면 간단하게 막으련만... 여의치 않아 스크립트를 작성하였다.
#/bin/bash


help()
{
echo ""
echo "/var/log/maillog is default"
echo "iptable apply is not default"
echo "banCount 100 is default"
echo "-a : iptable applied"
echo "-f : maillog FILE PATH"
echo "-c : ban count"
echo ""
echo "Usae : $0 -a -c 100 -f /var/log/maillog "
exit 0
}

ignoreIPs=("111.222.333.444" "111.111.111.111")
maillog="/var/log/maillog"
banCount=100
fw=false

# 옵션이름 뒤에 :이 붙은 것은 값을 필요로 함을 의미합니다.
while getopts ac:f: opt
do
case $opt in
a)
fw=true
;;
c)
banCount=$OPTARG
;;
f)
maillog=$OPTARG
;;
*)
help
exit 0
;;
esac
done


banIPs=`grep -E 'user not found|password fail' ${maillog} | awk -F: '{print $NF}' | sort | uniq -dc | awk '{if ($1 > '"${banCount}"') print $NF}'`

for banIP in $banIPs
do
for ignoreIP in ${ignoreIPs[@]}
do
if [ $ignoreIP == $banIP ]
then
# echo "ignore IP: ${ignoreIP}"
# echo "ban IP : $banIP"
break
fi
done

echo "ban IP : $banIP ,whois : $(geoiplookup $banIP)"
if [ $fw = true ] ; then
iptables -A INPUT -s ${banIP}/24 -j DROP
fi

done


if [ $fw = true ] ; then
#remove duplicate iptables rules
#http://www.krazyworks.com/remove-duplicate-iptables-rules/
/sbin/service iptables save
/sbin/iptables-save | awk '!x[$0]++' > /tmp/iptables.conf
/sbin/iptables -F
/sbin/iptables-restore < /tmp/iptables.conf
/sbin/service iptables save
/sbin/service iptables restart
if [ -f /tmp/iptables.conf ] ; then /bin/rm -f /tmp/iptables.conf ; fi
fi

qmail 큐(queue) 체크 스크립트.

계정의 패스워드가 노출되었거나, 사용자의 pc가 해킹 당했을 경우
해당 계정을 통해서 스팸 메일 발송이 자주 일어난다.

이렇게 되면 큐가 1000개는 기본으로 넘어가게 되어 정상적인 메일도
같이 안나게 된다.

정상적인 메일서버면 큐개수가 많아야 20~30개이므로
큐가 100개를 넘어가면 경고 메일을 보내도록 하였다.

아래 스크립트는 큐메일 용도이다.
#!/bin/sh
# Send an email when there are more then 1000 messages in the mail queue
# This is counted by the amount of lines in the qmail-qread output, so it's an indication...

show=$1
qread="/var/qmail/bin/qmail-qread"
qreadIDs=`/var/qmail/bin/qmail-qread | awk '{print $6}' | sed 's/#//' | grep -v '^$' | uniq`
len=`$qread | wc -l`
SUBJECT="WARNING: There are $len messages in the mail queue!----Country Check Version"
EMAIL="your@mail.com"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "" > $EMAILMESSAGE
chmod 777 $EMAILMESSAGE


if [ $len -gt 100 ]; then

for id in $qreadIDs
do
case "$id" in
"0.0.0.0"|"127.0.0.1"|"8.8.8.8")
continue;;
*)
#find /var/qmail/queue/mess/ -name 1449183 | xargs cat | grep mysolution-remoteip | awk '{print $2}' | xargs geoiplookup
queueFile=`find /var/qmail/queue/mess/ -name $id`
IP=`cat $queueFile | grep mysolution-remoteip | awk '{print $2}'`
# FROM=`cat $queueFile | grep From:`
# Subject=`cat $queueFile | grep Subject:`
countryChk=`geoiplookup $IP`
receiveChk=`cat $queueFile | grep Received:`

echo "Queue ID : $id --------------" >> $EMAILMESSAGE
echo "$IP : $countryChk" >> $EMAILMESSAGE
echo $FROM >> $EMAILMESSAGE
echo $Subject >> $EMAILMESSAGE
echo "$receiveChk" >> $EMAILMESSAGE
echo "-----------------------------" >> $EMAILMESSAGE
echo "" >> $EMAILMESSAGE

if [ 1 -eq $# ]; then

if [ $show = "show" ]; then
cat $EMAILMESSAGE
fi
fi
esac
done

MESSAGE=$(cat $EMAILMESSAGE)
# send an email using /bin/mail
#mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
printf "To: ${EMAIL}\nSubject: ${SUBJECT}\n\n $MESSAGE" | /var/qmail/bin/qmail-inject
rm -rf $EMAILMESSAGE

fi

2017년 11월 16일 목요일

mybatis hashmap으로 값 가져오기.

한개의 필드의 값을 hashmap으로 가져오려고 한다.

DB 내용
key1:value1,key2:value2,key3:value3

List<String> 으로 가져온 것과 마찬가지로 typeHandler를 사용하여 처리하였다.

 

DTO
HashMap<String, Object> extraProperties;


public HashMap<String, Object> getExtraProperties() {
return extraProperties;
}

public void setExtraProperties(HashMap<String, Object> extraProperties) {
this.extraProperties = extraProperties;
}

 

mybatis resultmap
<result property="extraProperties" column="extraProperties" typeHandler="com.my.handler.StringSplitMapTypeHandler" />

 

handler
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import com.my.util.CommonUtil;

public class StringSplitMapTypeHandler implements TypeHandler<HashMap<String,Object>> {

@Override
public void setParameter(PreparedStatement ps, int i, HashMap<String,Object> parameter, JdbcType jdbcType) throws SQLException {
if (parameter != null) {
ps.setString(i, parameter.toString());
}
}

@Override
public HashMap<String,Object> getResult(ResultSet rs, String columnName) throws SQLException {
String columnValueStr = rs.getString(columnName);
return CommonUtil.getStringSplitHashMap(columnValueStr, ",", ":");

}

@Override
public HashMap<String,Object> getResult(ResultSet rs, int columnIndex) throws SQLException {
String columnValueStr = rs.getString(columnIndex);
return CommonUtil.getStringSplitHashMap(columnValueStr, ",", ":");
}

@Override
public HashMap<String,Object> getResult(CallableStatement cs, int columnIndex) throws SQLException {
String columnValueStr = cs.getString(columnIndex);
return CommonUtil.getStringSplitHashMap(columnValueStr, ",", ":");
}
}

 

getStringSplitHashMap 코드
	public static HashMap<String,Object> getStringSplitHashMap(String targetStr, String fieldSeparator, String mapSeparator){
if (targetStr == null) return null;
String[] fields = targetStr.split(fieldSeparator);
HashMap<String,Object> returnData = new HashMap<String,Object>();
for(String str : fields){
String[] splitStr = str.split(mapSeparator);
if(splitStr.length < 2) continue;
String key = splitStr[0];
String value = splitStr[1];
returnData.put(key, value);
}
return returnData;
}

mybatis List으로 값 가져오기.

DB 테이블 한개의 필드에 저장된 값을 구분자로 나눠서 list로 가져오려고 한다.

typeHandler를 써서 간단히 적용 완료.

DB 내용 searchTags 필드
value1, value2, value3

,를 구분자로 각각의 value들이 하나의 List 값이 된다.

DTO
List<String> searchTags;

public List<String> getSearchTags() {
return searchTags;
}
public void setSearchTags(List<String> searchTags) {
this.searchTags = searchTags;
}

 

mybatis resultmap
<result property="searchTags" column="searchTags" typeHandler="com.my.handler.SplitTypeHandler" />

 

StringSplitTypeHandler
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class SplitTypeHandler implements TypeHandler<List<String>> {

@Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
if (parameter != null) {
ps.setString(i, parameter.toString());
}
}

@Override
public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
String columnValueStr = rs.getString(columnName);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.split(","));
}
return null;
}

@Override
public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
String columnValueStr = rs.getString(columnIndex);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.split(","));
}
return null;
}

@Override
public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
String columnValueStr = cs.getString(columnIndex);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.split(","));
}
return null;
}
}

 

 

 

2017년 11월 14일 화요일

자바 json 데이터 정렬(?) 예쁘게(?) 출력하기.

GSON 사용시.
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);

 

jettison 사용시
JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation

 

jackson 사용시
String test = "{\"age\":29,\"messages\":[\"msg 1\",\"msg 2\",\"msg 3\"],\"name\":\"mkyong\"}";
Object json = mapper.readValue(test, Object.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));

2017년 11월 3일 금요일

casperjs 팁

casperjs 로 대여섯개 사이트 자동 출첵을 걸어놨다.

삽질 중에 얻은 팁을 공유한다.

 

1. <input> 에 type 이 없을 경우 fill 이 안 먹힘. << 이런 개 같은 경우가 있음  그럴 때는 sendKey를 활용.

2. alert 한글이 깨지는 경우 setting 옵션에 encoding: "utf8", 를 넣으면 됨.

3. verbose: true로 해야 syntax 에러 나옴.

4.onsubmit="INVEN.Outlogin.login(this); return false;"   << 이런식으로 되어 있으면 fill true 가 제대로 동작 안함. click 이벤트로 처리 하도록

(INVEN이네..;;)

 

11번가 처리시
5. iframe 처리iframe접근은 casper.withFrame 를 사용.

 
==================
[debug] [phantom] opening url: http://www.11st.co.kr/browsing/NewPlusZonePlace.tmall?method=getEventPage&addCtgrNo=951965, HTTP GET
[debug] [phantom] Navigation requested: url=http://www.11st.co.kr/browsing/NewPlusZonePlace.tmall?method=getEventPage&addCtgrNo=951965, type=Other, willNavigate=true, isMainFrame=true << isMainFrame이 true
[debug] [phantom] url changed to "http://www.11st.co.kr/browsing/NewPlusZonePlace.tmall?method=getEventPage&addCtgrNo=951965"
[debug] [phantom] Navigation requested: url=http://www.11st.co.kr/html/blank.html, type=Other, willNavigate=true, isMainFrame=false << isMainFrame이 false임. iframe이란 소리.
[debug] [phantom] Navigation requested: url=http://www.11st.co.kr/jsp/event15/150625_benefitZoneAttend/iframe.jsp, type=Other, willNavigate=true, isMainFrame=false << iframe
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=false << iframe
[debug] [phantom] Navigation requested: url=https://vars.hotjar.com/rcj-99d43ead6bdf30da8ed5ffcb4f17100c.html, type=Other, willNavigate=true, isMainFrame=false << iframe
[debug] [phantom] Successfully injected Casper client-side utilities
[info] [phantom] Step anonymous 5/8 http://www.11st.co.kr/browsing/NewPlusZonePlace.tmall?method=getEventPage&addCtgrNo=951965 (HTTP 200)
[info] [phantom] Step anonymous 5/8: done in 6937ms.
[info] [phantom] Step _step 6/8 http://www.11st.co.kr/browsing/NewPlusZonePlace.tmall?method=getEventPage&addCtgrNo=951965 (HTTP 200)
[info] [phantom] Step _step 6/8: done in 6955ms.
==================

위의 로그를 보면 iframe이 4개임.
iframe 이름이 있으면 casper.withFrame('이름'... 이런식으로 주지만, 이름이 없으면 0부터 index를 준다.

11번가 자동 출첵, 2017.11.03 (casperjs)

기존에 curl 을 이용한 방식은 onclick등 자바스크립트 함수가 들어가면 매우 골치아파지는 문제가 있었다.

그래서 검색하다 'headless browser' 라는 걸 알게 됐고, casperjs 란 알게 됐다.


 

11번가 자동 출첵은 casperjs 로 만들어서 기존에 사용하고 있었는데,

9월 30일 이후로 출첵이 안된 거 보니 그 때 출석체크 페이지가 바뀐듯 하다.

 

11번가 자동 출첵은 왜 하느냐?

마일리지를 받기 위해서다. 마일리지로 뭘 할 수 있는냐?

사람들이 잘 모르는데, 11번가 마일리지로 할 수 있는게 많다.

상품쿠폰,배송비쿠폰, 핸드폰 데이터 쿠폰 그리고 상품 교환도 된다.

베스킨라빈스 레귤러 한번 먹어 봤다.

 

각설하고 11번가 자동 출체 코드는 아래와 같다.

var casper = require('casper').create({ pageSettings: { "userAgent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.10 (KHTML, like Gecko) Chrome/23.0.1262.0 Safari/537.10', "loadImages": true, "loadPlugins": false, "webSecurityEnabled": false, "ignoreSslErrors": true }, onWaitTimeout: function () { //throw new Error }, onStepTimeout: function () { //throw new Error }, encoding: "utf8", waitTimeout: 10000, stepTimeout: 10000, logLevel: "debug", // Only "info" level messages will be logged verbose: true // log messages will be printed out to the console }); var login_id = casper.cli.get("id"); var login_pw = casper.cli.get("pw"); var login_url = 'https://login.11st.co.kr/login/Login.tmall'; var attendance_url = 'http://www.11st.co.kr/browsing/MallPlanDetail.tmall?method=getMallPlanDetail&planDisplayNumber=935566'; //temp login_id = 'myid'; login_pw = 'mypass'; if(!login_id){ casper.echo("require id parameter"); // casper.exit(); //not working phantom.exit(); } if(!login_pw){ casper.echo("require pw parameter"); phantom.exit(1); } casper.start(login_url, function() { this.fill('form[name="login_form"]', { 'loginName' : login_id, 'passWord': login_pw }, false); this.click('#memLogin > div.save_idW > input'); this.wait(1000, function() { //this.echo("I've waited for a second."); }); }); //출석 casper.thenOpen(attendance_url, function(){ //iframe this.withFrame(1, function () { this.click('#regForm > div > div.sect03 > div.dev04 > a.get04 > img'); this.wait(1000, function() { this.setFilter("page.confirm", function(msg) { return true; }); }); }); }); //casper.run(); casper.run(function() { require('utils').dump(this.result.log); this.exit(); });

 

당연하지만 매일 자동으로 실행하려면 매일 켜져있는 pc(server)가 필요하다.

테스트용 리눅스 pc가 있어서 casperjs 설치 후 cron으로 매일 실행 되게끔 설정하였다.

 

없으신 분들은 알아서...;;

spring standalone application 에서 @service 실행

spring standalone application 에서 @service 실행

스프링 프로젝트에서 Main 함수안에서 기존에 구축된 @service 를 사용하려면

다음과 같이 하면 된다.
package xxx.xxx.www.test.console;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import xxx.xxx.www.test.service.TestService;

@Component
public class Main {

private static final String CONFIG_PATH = "classpath*:spring/all-config.xml";

public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(CONFIG_PATH);

Main p = context.getBean(Main.class);
p.start(args);
}

@Autowired
private TestService serv;
private void start(String[] args) throws Exception {
Map map = new HashMap();
map.put("docnum", "108");
List list = serv.selectList(map);
System.out.println("결과 logger:::::::::::::::: " + list);
}
}

 

한참 해맸었던 이유가 있는데, 기존에 스프링 환경은 아래와 같이 각 파트별로 구분지어 만들어진 환경이다.

spring-common.xml

spring-datasource.xml

....

이걸 부분만 적용하려니 잘 되지 않았다. 아래와 같이 한꺼번에 가져오도록 xml 파일을 하나 가져와서 해결.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

<import resource="classpath*:spring/spring-*.xml"/>
</beans>

2017년 10월 24일 화요일

HTTP 헤더, soap 헤더 추가

1.HTTP 헤더 추가.
		ShoppingService ss = new ShoppingService();
ShoppingServiceSoap port = ss.getShoppingServiceSoap();

Client client = ClientProxy.getClient(port);

// Creating HTTP headers
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("XXX-SOA-SERVICE-NAME", Arrays.asList("SampleService"));
headers.put("XXX-SOA-APP-NAME", Arrays.asList("SampleServiceAppv1"));

// Add HTTP headers to the web service request
client.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);

 

2. soap 헤더 추가
		ShoppingService ss = new ShoppingService();
ShoppingServiceSoap port = ss.getShoppingServiceSoap();

Client client = ClientProxy.getClient(port);



List<Header> headersList = new ArrayList<Header>();

Header testSoapHeader1 = new Header(ss.SERVICE, "SOAP Header Message 1", new JAXBDataBinding(String.class));
Header testSoapHeader2 = new Header(new QName("http://naver.com", "soapheader2"), "SOAP Header Message 2", new JAXBDataBinding(String.class));
Header testSoapHeader3 = new Header(new QName("Element"), "SOAP Header Message 3", new JAXBDataBinding(String.class));

headersList.add(testSoapHeader1);
headersList.add(testSoapHeader2);
headersList.add(testSoapHeader3);

// Add SOAP headers to the web service request
client.getRequestContext().put(Header.HEADER_LIST, headersList);


/* 실제 request
...
<soap:Header>
<ShoppingService xmlns="http://www.auction.co.kr/APIv1/ShoppingService">SOAP Header Message 1</ShoppingService>
<soapheader2 xmlns="http://naver.com">SOAP Header Message 2</soapheader2>
<EncryptedTicket>SOAP Header Message 3</EncryptedTicket>
...
*/

soap 로그 출력

cxf 로 생성된 파일을 이용하여 작업 할 때, soap request나 response 가 필요한 경우가 있다.

  1. Feature를 이용하는 법


		LoggingFeature logFeat = new LoggingFeature();
logFeat.setPrettyLogging(true);
ShoppingService ss = new ShoppingService(logFeat);
ShoppingServiceSoap port = ss.getShoppingServiceSoap();

 

2. InInterceptor를 이용하는 법.
		ShoppingService ss = new ShoppingService();
ShoppingServiceSoap port = ss.getShoppingServiceSoap();

Client client = ClientProxy.getClient(port);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());

 

Feature를 이용한 방법이 요청이 정렬되어서 나오기 때문에 추천한다.

"Result" 속성은 이미 정의되었습니다. 를 사용하여 이 충돌을 해결하십시오.

cxf로 웹서비스 클라이언트 자동 생성시 아래와 같은 에러 발생.
"Result" 속성은 이미 정의되었습니다. &lt;jaxb:property>를 사용하여 이 충돌을 해결하십시오.

wsdl element로 java 파일을 만들때, element 명으로 java 파일명을 생성하는 데, 중복된 경우 발생하는 에러이다.

-autoNameResolution 옵션으로 자동으로 변경 된다고 하는데, 왜인지 해당 옵션이 먹지 않는다.

 

binding 수동으로 지정해서 생성하면 된다고 하는 데,  잘 안됨.

그냥 wsdl 을 xml 로 저장하고 element 명을 수정하여 처리 하였다.

 

 

참조

 

cxf 웹서비스 클라이언트 자동 생성 파일 타입 지정.

cxf 로 웹서비스 클라이언트 생성시 생성되는 파일이 EUC-KR로 생성된다.
-encoding UTF-8 를 사용하여 생성되는 파일 타입을 강제로 지정이 가능하다.
해당 옵션을 wsdl2java.bat 넣고 이클립스에서 생성시에는 해당옵션이 적용되지 않는다.
이클립스에서는 wsdl2java.bat를 사용하지 않고 org.apache.cxf.tools.wsdlto.WSDLToJava 를 바로 사용하기 때문이다.

어쩔수 없이 이클립스 console에 출력되는 wsdl2java... command를 복사해서
-encoding UTF-8 를 붙여서 수동으로 생성 후 소스에 붙여 넣었다.

2017년 8월 4일 금요일

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification 에러 해결법

mvn clean install 명령어를 실행하려고 했더니, 에러 메시지가 난다.
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification

 

문제의 원인은 JAVA에서 인증서를 신뢰하지 않아서 발생 하는 문제.

나의 경우는 회사에서만 발생하는 에러이다.

왜냐면...

회사에서 나의 활동을 감시하기 위하여 'SSL PRISM Cerificate Installer (ARA Networks Co.,Ltd)' 프로그램을 강제로 설치하도록 했기 때문이다.

설치안하면 인터넷이 안된다.  ㅡㅡ;
쩝... 어째든 해결 방법은 다음과 같다.

아래의 경로로 가면
'C:\Program Files (x86)\ARA Networks Co.,Ltd\SSL PRISM Certificate Installer'

SSLPrism.crt 파일이 있다. 이것을 자바의 ca가 저장 되어 있는 'C:\Program Files\Java\jdk1.8.0_131\jre\lib\security'로 복사 해준다.

그래고 아래 명령어로 인증서를 추가 해준다.
C:\Program Files\Java\jdk1.8.0_131\jre\lib\security>keytool -keystore cacerts -importcert -alias sslprism -file SSLPrism.crt

 

패스워드를 물어보는데, 기본패스워드는 'changeit' 이다.

그리고 y.
mvn clean install 명령을 다시 실행하면 정상적으로 동작 한다.

 

ps.

아래 명령어로 ssl 무시하고 하려고 했지만, 안 됐다.
mvn clean install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

https://stackoverflow.com/questions/21252800/how-to-tell-maven-to-disregard-ssl-errors-and-trusting-all-certs

 

참고.
https://gs.saro.me/#!m=elec&p=1&jn=772
https://docs.microsoft.com/ko-kr/azure/java-add-certificate-ca-store

2017년 7월 6일 목요일

StringUtils의 isEmpty, isBlank 분석.

자바에서 Null 포함 빈값을 체크 할 때, StringUtils의 isEmpty 나 isBlank를 사용한다.
isEmpty는 "", null 일 경우 true를 리턴한다.
isBlank는 "", null, " " 일 경우 true를 리턴한다.

해당 메소드가 어떻게 동작하는 지 알아 봤다.

소스
isEmpty가 동작하는 방식은 간단하다.
        public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}

null 이거나, length 가 0 일경우를 체크 한다.

 

 

isBlank는 조금 더 복잡하다.
        public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}

첫번째는 isEmpty와 같지만 스페이스를 체크하기 위해 for문을 돈다.

 

 

간혹 StringUtils 라이브러리가 없고, 추가 할 수 없는 경우 참고 하면 좋을 것 같다.

2017년 6월 30일 금요일

오라클 EXCEPTION 진행 문제.

CREATE OR REPLACE PROCEDURE PROCEDURE1
AS

V_CNTR_NO VARCHAR2(13) ;
V_ITEM_CD VARCHAR2(13) ;

BEGIN

DBMS_OUTPUT.PUT_LINE('시작.') ;

BEGIN
SELECT CNTR_NO INTO V_CNTR_NO FROM TB_OD_CNSGN_FEE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('계약번호가 없습니다.') ;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('계약번호가 두건 이상입니다.') ;
END;

DBMS_OUTPUT.PUT_LINE('중간.') ;

BEGIN
SELECT ITEM_CD INTO V_ITEM_CD FROM TB_OD_CNSGN_FEE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('아이템코드가 없습니다.') ;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('아이템코드가 두건 이상입니다.') ;
END;


DBMS_OUTPUT.PUT_LINE('끝.') ;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TOP EXCEPTION.') ;
END PROCEDURE1;

-------실행결과----------------------------
계약번호가 두건 이상입니다.
아이템코드가 두건 이상입니다.
끝.
프로세스가 종료되었습니다.

보통 EXCEPTION 처리를 위와 같이 중첩 블록을 사용하였다.
문제는 EXCEPTION이 발생하여도 해당 블록만 멈추고 다음으로 계속 진행을 한다.
자바와는 다르다.
그래서 각 블록마다 RAISE_APPLICATION_ERROR를 발생시키거나, 메인 블록만 남기는 방법을 선택해야 한다.

2017년 6월 1일 목요일

우클릭시 text 복사

우클릭시 '복사' DIV 나타나서 클릭시 우클릭 위의 TEXT를 복사하는 스크립트이다.

원했던 건 우클릭하면 바로 복사 하려고 하였으나,
왜 그런지 document.execCommand("copy"); 가 동작하지 않는다.
그래서 click 이벤트로 발생하기 위해 '복사'div 를 생성하였다.
	function copyToClipboard(value, showNotification, notificationText) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(value).select();
document.execCommand("copy");
$temp.remove();

if (typeof showNotification === 'undefined') {
showNotification = true;
}
if (typeof notificationText === 'undefined') {
notificationText = "Copied to clipboard";
}

var notificationTag = $("div.copy-notification");
if (showNotification && notificationTag.length == 0) {
notificationTag = $("<div/>", { "class": "copy-notification", text: notificationText });
$("body").append(notificationTag);

notificationTag.fadeIn("slow", function () {
setTimeout(function () {
notificationTag.fadeOut("slow", function () {
notificationTag.remove();
});
}, 10);
});
}
}

var copyData = "";
//$(".context-menu-one").on("contextmenu", function(event) {
$("table").on("contextmenu", function(event) {
event.preventDefault();
$("div.custom-menu").remove();
copyData = $.trim(event.target.textContent);

$("<div class='custom-menu'>복사</div>")
.appendTo("body")
.css({top: event.pageY + "px", left: event.pageX + "px"})
.on("click", function(event) {
event.preventDefault();
copyToClipboard(copyData);
copyData = "";
$("div.custom-menu").remove();
});

$("body").click(function (){
$("div.custom-menu").remove();
});
});


 
/* 우측 클릭 '복사' */
.custom-menu {
z-index:1000;
position: absolute;
background-color:#C0C0C0;
border: 1px solid black;
padding: 2px;
border-radius: 5px;
}

.copy-notification {
color: #ffffff;
background-color: rgba(0,0,0,0.8);
padding: 20px;
border-radius: 30px;
position: fixed;
top: 50%;
left: 50%;
width: 150px;
margin-top: -30px;
margin-left: -85px;
display: none;
text-align:center;
}

참조

2017년 5월 29일 월요일

datepicker 버튼 추가(당일, 1주일, 1개월, 3개월)



 

 

 

 

 

 

 

 

 

from 절과 to절이 있는 부분을 datepicker로는 만들수가 없다.

datepicker 달력 하단에 당일, 1주일, 1개월, 3개월 버튼을 넣어서

from절과 to절에 넣도록 했다.

 
function fnDatepickerFromToDateRangeSet(startId, endId, searchFnName){

$("#"+startId).datepicker( "option", "beforeShow",
function (input) {
fnDatepickerRangeSet(input,startId,endId,1,searchFnName);
}
);

$("#"+endId).datepicker( "option", "beforeShow",
function (input) {
fnDatepickerRangeSet(input,startId,endId,2,searchFnName);
}
);
//버튼 위치 input 안으로 넣도록 함.
$(".ui-datepicker-trigger").css({"vertical-align": "middle", "cursor": "pointer", "padding-left": "2px"}).addClass("box_date_btn");

}


//하단 당월,1주일,1개월,3개월 버튼 추가 - 함수.
//이 함수 자체는 달력이 보여질때 실행되고 하단 버튼 클릭시는 'click: function' 부분에서 실행됨을 주의!
function fnDatepickerRangeSet(input, startId, endId, startEndChk, searchFnName) {
setTimeout(function () {

var dateText = ["당일", "1주일", "1개월", "3개월"];
var dateRange = ["0d", "-7d", "-1m", "-3m"];
var buttonPane = $(input).datepicker("widget").find(".ui-datepicker-buttonpane");

for(i=0;dateText.length > i; i++ ){
$("<button>", { text: dateText[i], value:dateRange[i], executeFn:searchFnName,
//하단 버튼을 클릭시에는 여기 'click: function'이 실행된다.
click: function (eventData) {
$("#"+startId).datepicker('setDate', eventData.currentTarget.value);
$("#"+endId).datepicker('setDate', '0d');
jQuery(input).datepicker('hide');
var execFn = eventData.currentTarget.getAttribute('executeFn');
if(execFn){
eval(execFn);
}

}
}).appendTo(buttonPane).addClass("ui-datepicker-clear ui-state-default ui-priority-primary ui-corner-all");
}

//오늘 버튼 숨김
$(input).datepicker("widget").find(".ui-datepicker-current").hide();



}, 1)
}

 

2017년 2월 15일 수요일

오픈소스 IPS 테스트 후기

오픈소스 IPS 를 사용하기 위해 테스트 해봤다.

 

테스트 환경

1.xenserver의 가상화로 테스트

2. 1G 메모리, 20 하드 부여, 1core

중점으로 체크 한 사항은 IPS 기능, 라이센스,  웹GUI, 업데이트 날짜이다.

3. 간단한 소감.

security onion : v12,v14 두 버젼 모두 알수 없는 프로그램 충돌
smoothwell : 하드 인식 안됨.
clearOs : 로그가 부실함. 되는 지도 잘 모르겠음.로그가 안나옴.
untangle : 무려 한글지원(간단한 영어라 별 의미는 없음) 로그 검색기능이 좋음.
여러가지 기능을 모두 쓰려면 라이센스 구매해야 하지만, 내가 필요한 IPS 기능은 무료임.
DD-WRT : 가정용, 중소기업
제로쉘 : 가정용, 중소기업
Endian (EFC) : 쉘모드 접속시 명령어가 스위치처럼 되어 있음. login 으로 쉘 진입가능. IPS 로그가 안나옴. 되는 건지...firewall 로그는 나옴
pfsense : IDS or IPS 기능이 없음. (snort 추가하면 가능).
opnSense : pfsense랑 비슷한듯...
ipfire : 로그에 나라 표기됨. 로그 검색 기능이 없음
selks : IPS 없음. 데이터 안나옴. Out Of Memory 로 뻗음. 별로임.

최종적으로는 untangle과 ipfire.

처음에는 ipfire를 이용하려고 하였으나,  로그 검색기능 없다.

최종적으로 untangle 설치함.

2017년 2월 13일 월요일

포트스캔시 메일포트가 무조건 나오는 이유

포트 스캔을 실행하면 아래의 포트가 사용하는 걸로 나온다.

25smtp
110pop3
119nntp
143imap
465urd
563nntps
587submission
993imaps
995pop3s
타겟 서버에서는 실행되는 프로세스가 없다.

백도어가 있나 살펴보고, arp spoofing 인가도 살펴 봐도 아니였다.

조금 더 살펴보니 타겟 서버외에 포트스캔을 하는 모든 서버가 위의 포트가 오픈 되어있다고 나온다.

이상해서 다른 pc에서 같은 서버로 포트스캔을 해보니 정상적으로 나온다.

문제는 avast 백신이였다.

avast 백신 기능 중에는 메일 감시 기능이란게 있는데, 이게 원인이였다.

자체적으로 외부로 나가는 해당 포트를 감시하고 있다가 검사하고 내보내는 것 같다.

2017년 1월 10일 화요일

윈도우 수동 재부팅 확인 이벤트 로그

확인 서버
OS 이름 Microsoft® Windows Server® 2008 Standard
OS 이름 Microsoft Windows Server 2008 R2 Standard

 

수동으로 서버를 재시작시 아래와 같은 이벤트 로그가 발생한다.

 

Administrator 계정으로 수동 재시작

수동 재시작 테스트(기타 계획됨.) 부분은 내가 직접 써넣은 내용.
-----
이벤트 ID 1074
다음 이유 때문에 Explorer.EXE 프로세스에서 MYSERVER\Administrator사용자를 대신하여 MYSERVER 컴퓨터에서 다시 시작을(를) 시작했습니다: 기타(계획됨)
이유 코드: 0x85000000
종료 유형: 다시 시작
설명: 수동 재시작 테스트(기타 계획됨.)
-----
이벤트 ID 26
응용 프로그램 팝업: Windows : 다른 사용자가 이 컴퓨터에 로그온되어 있습니다. Windows를 다시 시작하면 다른 사용자의 데이터가 손실될 수 있습니다.

다시 시작하시겠습니까?
-----
이벤트 ID 1074
다음 이유 때문에 C:\Windows\system32\winlogon.exe (MYSERVER) 프로세스에서 MYSERVER\Administrator사용자를 대신하여 MYSERVER 컴퓨터에서 다시 시작을(를) 시작했습니다: 이 원인에 대한 제목 찾지 못함
이유 코드: 0x500ff
종료 유형: 다시 시작
설명:
---------------------

 

시스템이 재부팅을 했을 경우 아래와 같은 로그 발생. - 계정이 SYSTEM으로 표기.

다음 이유 때문에 C:\Windows\system32\svchost.exe (MYSERVER) 프로세스에서 NT AUTHORITY\SYSTEM 사용자를 대신하여 MYSERVER컴퓨터에서 다시 시작을(를) 시작했습니다: 이 원인에 대한 제목 찾지 못함
이유 코드: 0x80020002
종료 유형: 다시 시작
설명:

2017년 1월 9일 월요일

Could not find method android() for arguments

android 블락은 module/build.gradle 위치에 넣어 줘야 한다.

예를 들어 프로젝트에 최상단에 있는 /build.gradle 에 넣으면

제목과 같은 에러가 난다.

 

출처: http://stackoverflow.com/questions/37250493/could-not-find-method-android-for-arguments

2017년 1월 5일 목요일

대상 세션이 현재 세션과 호환되지 않습니다. (The target session is incompatible with the current session problem)

아마도 시트릭스가 설치 되어 있는 서버에서 발생하는 문제일 것이다.

환경
Citrix ICA 3.0 버젼
RDP 7.1 버젼
윈도우의 원격데스크탑 프로토콜은 윈도우에서 제공하는 RDP 와 Citrix의 ICA를 지원한다.

해당 문제는 Citrix로의 접속 후 해당 세션이 살아 있는 상태에서
RDP 프로토콜, 즉 원격데스크탑(mstsc)로 붙으려고 하면 나타나는 현상이라고 한다.

해결책은 citrix 로그인 후 로그오프 후에 RDP로 붙으면 된다.

 

출처 : http://discussions.citrix.com/topic/276873-the-target-session-is-incompatible-with-the-current-session-problem/
참고 : https://support.microsoft.com/ko-kr/kb/186607

17-01-05 3_20 my HONEY POT Black IP List.

1.119.12.115
1.206.220.154
1.31.67.224
1.34.190.13
1.59.255.213
101.19.5.0
101.25.28.112
103.224.147.87
103.243.107.193
103.243.54.168
104.130.241.36
104.238.222.88
104.43.161.37
106.122.195.133
106.166.151.40
106.3.46.117
106.51.230.74
106.92.19.106
108.171.109.113
109.169.164.238
109.198.240.56
109.201.154.249
109.232.190.161
109.248.216.6
110.78.151.73
111.106.174.113
111.235.66.154
111.32.134.27
111.68.45.98
111.74.238.17
111.77.235.6
111.78.119.119
112.112.78.62
112.133.193.188
112.229.131.243
112.23.118.114
112.238.147.20
112.29.175.204
112.36.12.249
112.74.48.173
112.82.162.3
112.85.42.102
112.85.42.106
112.85.42.18
112.85.42.46
112.85.42.99
113.108.127.187
113.123.225.24
113.175.217.253
113.197.178.38
113.206.156.63
113.224.178.10
113.53.83.125
113.56.192.13
113.56.192.186
113.56.193.237
113.6.52.186
114.143.4.127
114.143.80.27
114.229.97.151
114.231.53.157
114.80.200.67
115.168.69.2
115.192.174.132
115.198.34.127
115.202.149.192
115.239.230.222
115.239.248.35
115.63.121.190
116.208.7.247
116.31.27.204
117.135.131.60
117.66.170.227
117.82.169.115
118.113.59.183
118.113.95.71
118.123.246.81
118.218.78.127
118.36.21.202
118.70.118.131
119.187.226.45
119.193.140.155
119.193.140.160
119.193.140.165
119.193.140.183
119.193.140.193
119.193.140.202
119.193.140.221
119.90.34.190
12.33.221.109
120.27.230.111
120.74.191.179
121.106.223.240
121.12.170.111
121.123.153.46
121.13.107.117
121.149.125.124
121.200.163.65
121.228.114.84
121.27.251.255
121.32.12.32
121.58.192.58
122.121.96.155
122.160.78.121
122.189.132.23
122.189.137.174
122.189.183.121
122.190.147.42
122.190.255.134
122.190.255.182
122.190.255.71
122.194.229.39
122.194.229.5
123.117.153.71
123.14.184.254
123.183.209.133
123.202.10.41
123.249.34.199
123.30.37.44
123.31.30.22
123.31.31.91
123.31.32.22
123.31.34.130
123.31.34.174
123.31.34.180
123.31.34.216
123.31.34.93
123.31.34.96
123.31.35.43
123.31.35.98
123.31.41.146
123.31.41.149
123.85.190.139
124.114.124.88
124.158.15.113
124.74.19.100
125.138.235.75
125.211.216.157
131.0.112.12
132.255.103.64
138.118.7.62
138.99.165.124
139.217.1.233
139.219.225.190
14.134.243.159
14.139.227.116
14.17.96.172
14.174.44.150
14.36.28.173
144.52.169.196
146.0.72.178
147.75.99.113
150.101.178.214
151.54.116.232
153.142.0.44
153.229.228.169
153.3.139.18
153.92.40.101
153.99.182.4
154.49.212.90
159.224.58.201
163.172.128.82
163.172.16.89
165.255.102.74
168.121.105.75
168.195.2.195
168.195.2.209
168.228.150.164
168.232.127.168
171.114.125.53
171.121.47.232
171.212.141.108
171.212.142.127
171.231.166.147
173.227.92.34
175.0.248.154
175.163.67.154
175.169.74.229
176.96.10.253
177.11.121.84
177.11.123.83
177.126.233.43
177.129.243.50
177.135.205.13
177.83.184.118
178.119.181.147
178.162.199.197
178.162.199.93
178.162.205.2
178.162.205.30
178.187.50.107
178.35.11.19
178.46.125.56
178.46.57.194
178.64.187.67
178.70.254.88
18.248.7.33
180.120.246.234
180.171.161.175
180.213.12.141
180.97.221.56
181.16.212.241
181.211.95.224
182.100.67.119
182.100.67.40
182.147.199.246
182.40.48.139
182.45.3.137
182.54.220.110
182.55.140.90
182.91.107.40
183.102.89.242
183.135.255.52
183.153.195.231
183.156.9.104
183.203.19.14
183.46.20.188
183.93.194.81
183.93.195.151
183.93.195.243
183.93.200.36
183.93.248.181
183.93.253.160
183.94.193.230
185.56.82.66
185.69.53.169
187.1.142.2
188.119.201.63
188.16.121.154
188.16.83.243
188.17.2.202
188.178.124.210
188.19.192.99
188.212.100.149
188.213.174.190
188.27.115.187
189.126.171.17
189.14.35.99
189.158.40.135
189.85.54.30
190.153.217.26
190.25.187.219
191.17.246.191
191.190.221.158
191.253.207.7
191.96.249.8
192.40.88.19
192.40.95.5
195.128.56.105
195.20.3.210
196.210.27.201
197.248.27.226
199.115.228.94
199.19.104.171
200.229.159.197
200.37.166.83
201.16.246.198
202.109.143.47
202.112.237.226
202.66.39.100
203.130.45.23
203.144.197.50
203.162.37.206
203.93.239.4
207.32.206.14
208.107.64.238
209.161.5.167
210.200.142.100
210.3.175.126
211.193.41.122
211.24.114.45
212.124.21.188
212.129.17.101
212.129.26.141
212.144.230.242
212.199.110.253
212.235.126.222
212.83.149.82
212.83.187.106
213.14.7.202
213.27.84.82
216.108.232.25
216.196.68.1
217.196.20.44
217.23.4.45
217.60.67.75
218.109.249.123
218.16.129.142
218.3.140.74
218.65.30.124
218.65.30.134
218.7.221.241
218.71.228.102
218.83.155.86
218.87.109.153
218.91.153.179
219.141.247.16
219.142.69.132
219.142.69.134
219.155.113.8
219.82.22.0
220.134.167.172
220.174.132.131
220.178.78.130
220.179.138.72
221.175.92.220
221.194.44.225
221.204.224.54
221.204.224.55
221.207.236.189
221.210.200.245
221.221.220.39
221.229.196.191
222.101.189.100
222.122.20.132
222.122.20.210
222.132.156.2
222.132.156.3
222.182.55.28
222.186.15.236
222.186.51.138
222.239.10.143
222.239.10.238
222.47.26.18
222.73.51.233
223.100.67.248
223.197.185.174
24.148.27.42
27.154.136.239
27.205.40.247
31.148.107.170
31.162.207.84
31.162.40.3
31.162.9.166
31.163.250.98
31.163.51.127
31.170.38.50
31.173.90.61
31.181.54.72
31.192.106.210
31.192.213.205
31.207.85.90
35.160.80.166
36.101.5.70
36.36.57.58
36.80.33.139
37.21.1.224
37.228.132.202
37.29.83.21
37.58.58.214
39.162.180.45
39.165.136.137
39.174.253.198
39.182.145.55
39.73.222.155
41.211.9.138
42.114.135.201
42.184.140.181
42.202.52.199
42.51.8.227
42.98.205.66
42.98.254.15
42.98.254.199
45.76.222.225
45.76.97.164
46.165.210.13
46.165.223.202
46.165.251.148
46.165.251.162
46.166.186.219
46.189.129.47
46.48.190.140
47.88.102.218
49.117.150.44
49.64.4.39
49.73.131.125
49.73.170.73
5.139.196.189
5.14.20.29
5.140.155.118
5.141.150.56
5.143.255.188
5.150.209.108
5.153.234.90
5.45.79.26
52.163.60.33
52.197.225.171
58.19.144.154
58.205.211.35
58.210.110.205
59.108.99.172
59.11.107.82
59.174.84.193
59.175.137.82
59.3.75.16
59.5.175.152
59.63.166.81
59.63.188.3
60.184.101.148
60.21.162.7
60.212.29.78
60.215.42.218
60.220.85.216
61.135.193.158
61.136.166.130
61.143.152.14
61.143.152.2
61.182.170.38
61.233.76.154
61.237.231.103
61.50.187.51
62.16.157.209
62.189.82.93
62.210.192.216
63.143.75.75
66.168.224.45
67.205.159.51
68.119.44.149
68.192.42.63
71.57.18.8
72.12.210.26
77.109.137.32
80.13.19.206
80.179.223.42
80.19.227.68
80.251.113.138
81.17.20.98
81.171.85.90
83.172.34.183
84.121.83.39
84.57.28.39
85.17.80.229
85.173.78.166
85.234.1.126
86.109.193.66
86.169.209.74
88.132.98.229
88.249.106.23
88.74.193.163
89.107.34.27
89.97.55.33
90.189.190.93
90.60.6.218
91.211.208.78
91.219.28.221
91.224.160.108
91.224.161.88
91.235.126.148
92.125.1.44
92.126.236.68
92.222.74.92
93.103.122.242
93.103.152.125
93.158.72.83
93.190.143.130
93.39.252.194
93.57.78.203
93.72.223.62
93.78.255.73
94.241.240.134
94.50.240.68
94.50.245.136
94.50.253.135
94.51.137.139
94.51.43.180
95.102.199.135
95.188.131.155
95.189.169.248
95.189.54.20
95.83.50.143
95.83.55.171
95.84.178.46

2017년 1월 4일 수요일

M.2 SSD 사용시 주의사항

하드웨어 사양

보드 : [GIGABYTE] GA-H170-GAMING 3 게이밍에디션 제이씨현 (인텔H170/ATX)
SSD : [e-Star] M.2 NVMe 2280 ST980 (256GB)

위의 사양으로 데스크탑 구입했다.

SATA-EXPRESS 포트는 SATA로 하위 호환이 된다고 알고 있다.

그런 데 M.2 SSD 사용하면 SATA-EXPRESS 사용이 안된다.

e-STAR ST980 M.2 2280는 PCIe Gen3 X4 기반이다.
기가바이트 사이트의 메뉴얼 ( http://www.gigabyte.kr/products/product-page.aspx?pid=5834#manual )을 보면 지원되는 부분이 나와있음. (16페이지)

SATA3 0 ~ 3 포트는 사용불가.

SATA3 0~3번 포트까지는 STAT EXPRESS를 사용하는 포트이다.
M2A_32G

M.2 SSD 제거시...

그런데 밑에 M2A_32G M.2 커넥터 부분을 보면 모두 지원됨으로 나옴.

M2D_32G가 위에 슬롯.
M2A_32G가 밑에 슬롯.

다행히도 M.2 슬롯이 두개라서 지원 되는 듯 하다.

RTFM;;

17-01-04 3_21 my HONEY POT Black IP List.

1.119.12.115
1.206.220.154
1.31.67.224
1.34.190.13
1.59.255.213
101.19.5.0
101.25.28.112
103.224.147.87
103.243.107.193
103.243.54.168
104.130.241.36
104.238.222.88
104.43.161.37
106.122.195.133
106.166.151.40
106.51.230.74
106.92.19.106
108.171.109.113
109.169.164.238
109.198.240.56
109.232.190.161
109.248.216.6
111.106.174.113
111.235.66.154
111.32.134.27
111.68.45.98
111.74.238.17
111.78.119.119
112.112.78.62
112.133.193.188
112.229.131.243
112.238.147.20
112.29.175.204
112.36.12.249
112.74.48.173
112.82.162.3
112.85.42.102
112.85.42.106
112.85.42.18
112.85.42.46
112.85.42.99
113.123.225.24
113.175.217.253
113.197.178.38
113.206.156.63
113.224.178.10
113.53.83.125
113.56.192.13
113.56.192.186
113.56.193.237
114.143.4.127
114.229.97.151
114.231.53.157
114.80.200.67
115.168.69.2
115.192.174.132
115.198.34.127
115.239.230.222
115.239.248.35
115.63.121.190
116.208.7.247
116.31.27.204
117.135.131.60
117.66.170.227
117.82.169.115
118.113.95.71
118.123.246.81
118.218.78.127
118.36.21.202
118.70.118.131
119.187.226.45
119.193.140.155
119.193.140.160
119.193.140.165
119.193.140.183
119.193.140.193
119.193.140.202
119.193.140.221
119.90.34.190
12.33.221.109
120.27.230.111
120.74.191.179
121.106.223.240
121.123.153.46
121.13.107.117
121.149.125.124
121.200.163.65
121.228.114.84
121.27.251.255
121.32.12.32
121.58.192.58
122.121.96.155
122.160.78.121
122.189.132.23
122.189.137.174
122.189.183.121
122.190.255.134
122.190.255.182
122.190.255.71
122.194.229.39
122.194.229.5
123.117.153.71
123.14.184.254
123.183.209.133
123.202.10.41
123.30.37.44
123.31.30.22
123.31.31.91
123.31.32.22
123.31.34.130
123.31.34.174
123.31.34.180
123.31.34.216
123.31.34.93
123.31.34.96
123.31.35.43
123.31.35.98
123.31.41.146
123.31.41.149
123.85.190.139
124.114.124.88
124.158.15.113
124.74.19.100
125.138.235.75
125.211.216.157
131.0.112.12
132.255.103.64
138.118.7.62
138.99.165.124
139.217.1.233
139.219.225.190
14.134.243.159
14.139.227.116
14.17.96.172
14.36.28.173
146.0.72.178
147.75.99.113
151.54.116.232
153.142.0.44
153.229.228.169
153.3.139.18
153.92.40.101
153.99.182.4
154.49.212.90
159.224.58.201
163.172.128.82
163.172.16.89
165.255.102.74
168.121.105.75
168.195.2.195
168.195.2.209
168.228.150.164
168.232.127.168
171.114.125.53
171.212.141.108
171.231.166.147
173.227.92.34
175.0.248.154
175.163.67.154
175.169.74.229
176.96.10.253
177.11.121.84
177.11.123.83
177.126.233.43
177.129.243.50
177.135.205.13
177.83.184.118
178.162.199.197
178.162.199.93
178.162.205.2
178.162.205.30
178.35.11.19
178.46.125.56
178.46.57.194
178.64.187.67
178.70.254.88
18.248.7.33
180.120.246.234
180.171.161.175
180.213.12.141
180.97.221.56
181.16.212.241
182.100.67.119
182.100.67.40
182.147.199.246
182.40.48.139
182.45.3.137
182.54.220.110
182.55.140.90
182.91.107.40
183.102.89.242
183.135.255.52
183.153.195.231
183.156.9.104
183.203.19.14
183.46.20.188
183.93.194.81
183.93.195.151
183.93.195.243
183.93.200.36
183.93.248.181
183.93.253.160
183.94.193.230
185.56.82.66
185.69.53.169
187.1.142.2
188.119.201.63
188.16.121.154
188.16.83.243
188.17.2.202
188.178.124.210
188.19.192.99
188.212.100.149
188.213.174.190
189.126.171.17
189.14.35.99
189.85.54.30
190.153.217.26
190.25.187.219
191.17.246.191
191.190.221.158
191.253.207.7
191.96.249.8
192.40.88.19
192.40.95.5
195.128.56.105
195.20.3.210
196.210.27.201
197.248.27.226
199.115.228.94
199.19.104.171
200.229.159.197
200.37.166.83
201.16.246.198
202.112.237.226
202.66.39.100
203.130.45.23
203.144.197.50
203.162.37.206
203.93.239.4
207.32.206.14
208.107.64.238
209.161.5.167
210.200.142.100
210.3.175.126
211.193.41.122
211.24.114.45
212.124.21.188
212.129.17.101
212.129.26.141
212.144.230.242
212.199.110.253
212.235.126.222
212.83.149.82
212.83.187.106
213.14.7.202
213.27.84.82
216.108.232.25
217.196.20.44
217.23.4.45
217.60.67.75
218.109.249.123
218.16.129.142
218.3.140.74
218.65.30.124
218.65.30.134
218.7.221.241
218.71.228.102
218.83.155.86
218.87.109.153
218.91.153.179
219.141.247.16
219.142.69.132
219.142.69.134
219.155.113.8
219.82.22.0
220.134.167.172
220.174.132.131
220.178.78.130
220.179.138.72
221.175.92.220
221.194.44.225
221.204.224.54
221.204.224.55
221.207.236.189
221.210.200.245
221.229.196.191
222.101.189.100
222.122.20.132
222.122.20.210
222.132.156.3
222.182.55.28
222.186.15.236
222.186.51.138
222.239.10.143
222.239.10.238
222.47.26.18
222.73.51.233
223.100.67.248
24.148.27.42
27.154.136.239
27.205.40.247
31.148.107.170
31.162.207.84
31.162.40.3
31.162.9.166
31.163.250.98
31.163.51.127
31.170.38.50
31.173.90.61
31.181.54.72
31.192.106.210
31.192.213.205
31.207.85.90
35.160.80.166
36.101.5.70
36.80.33.139
37.21.1.224
37.228.132.202
37.29.83.21
37.58.58.214
39.162.180.45
39.165.136.137
39.174.253.198
39.182.145.55
39.73.222.155
41.211.9.138
42.114.135.201
42.184.140.181
42.202.52.199
42.51.8.227
42.98.205.66
42.98.254.15
42.98.254.199
45.76.222.225
45.76.97.164
46.165.210.13
46.165.251.148
46.165.251.162
46.166.186.219
46.189.129.47
46.48.190.140
49.117.150.44
49.64.4.39
49.73.131.125
49.73.170.73
5.139.196.189
5.14.20.29
5.140.155.118
5.141.150.56
5.143.255.188
5.150.209.108
5.153.234.90
5.45.79.26
52.163.60.33
52.197.225.171
58.19.144.154
58.205.211.35
58.210.110.205
59.108.99.172
59.11.107.82
59.174.84.193
59.175.137.82
59.3.75.16
59.5.175.152
59.63.166.81
59.63.188.3
60.184.101.148
60.21.162.7
60.212.29.78
60.215.42.218
60.220.85.216
61.135.193.158
61.136.166.130
61.143.152.14
61.143.152.2
61.182.170.38
61.233.76.154
61.237.231.103
61.50.187.51
62.16.157.209
62.189.82.93
62.210.192.216
63.143.75.75
66.168.224.45
67.205.159.51
68.119.44.149
68.192.42.63
72.12.210.26
77.109.137.32
80.13.19.206
80.179.223.42
80.19.227.68
80.251.113.138
81.17.20.98
81.171.85.90
83.172.34.183
84.121.83.39
84.57.28.39
85.17.80.229
85.173.78.166
85.234.1.126
86.109.193.66
86.169.209.74
88.132.98.229
88.249.106.23
88.74.193.163
89.97.55.33
90.189.190.93
90.60.6.218
91.211.208.78
91.219.28.221
91.224.160.108
91.224.161.88
92.125.1.44
92.126.236.68
92.222.74.92
93.103.122.242
93.103.152.125
93.158.72.83
93.190.143.130
93.39.252.194
93.72.223.62
93.78.255.73
94.241.240.134
94.50.240.68
94.50.245.136
94.50.253.135
94.51.137.139
94.51.43.180
95.188.131.155
95.189.169.248
95.189.54.20
95.83.50.143
95.83.55.171
95.84.178.46

2017년 1월 3일 화요일

17-01-03 3_40 my HONEY POT Black IP List.

1.119.12.115
1.206.220.154
1.31.67.224
1.34.190.13
1.59.255.213
101.19.5.0
101.25.28.112
103.224.147.87
103.243.107.193
103.243.54.168
104.130.241.36
104.238.222.88
104.43.161.37
106.122.195.133
106.166.151.40
106.51.230.74
106.92.19.106
108.171.109.113
109.169.164.238
109.198.240.56
109.232.190.161
111.106.174.113
111.32.134.27
111.68.45.98
111.78.119.119
112.112.78.62
112.133.193.188
112.229.131.243
112.238.147.20
112.29.175.204
112.74.48.173
112.82.162.3
112.85.42.102
112.85.42.106
112.85.42.18
112.85.42.46
112.85.42.99
113.123.225.24
113.175.217.253
113.197.178.38
113.206.156.63
113.224.178.10
113.53.83.125
113.56.192.13
113.56.192.186
113.56.193.237
114.229.97.151
114.231.53.157
114.80.200.67
115.168.69.2
115.198.34.127
115.239.230.222
115.239.248.35
115.63.121.190
116.208.7.247
117.135.131.60
117.82.169.115
118.113.95.71
118.123.246.81
118.218.78.127
118.36.21.202
118.70.118.131
119.187.226.45
119.193.140.155
119.193.140.165
119.193.140.183
119.193.140.193
119.193.140.202
119.193.140.221
119.90.34.190
12.33.221.109
120.27.230.111
120.74.191.179
121.106.223.240
121.13.107.117
121.200.163.65
121.228.114.84
121.27.251.255
121.32.12.32
121.58.192.58
122.121.96.155
122.160.78.121
122.189.132.23
122.189.137.174
122.190.255.134
122.190.255.182
122.190.255.71
122.194.229.39
122.194.229.5
123.117.153.71
123.14.184.254
123.183.209.133
123.202.10.41
123.30.37.44
123.31.30.22
123.31.31.91
123.31.32.22
123.31.34.130
123.31.34.174
123.31.34.180
123.31.34.216
123.31.34.93
123.31.34.96
123.31.35.43
123.31.35.98
123.31.41.146
123.31.41.149
123.85.190.139
124.114.124.88
124.158.15.113
124.74.19.100
125.138.235.75
125.211.216.157
131.0.112.12
132.255.103.64
138.118.7.62
138.99.165.124
139.217.1.233
139.219.225.190
14.134.243.159
14.139.227.116
14.17.96.172
14.36.28.173
146.0.72.178
147.75.99.113
151.54.116.232
153.142.0.44
153.229.228.169
153.3.139.18
153.92.40.101
153.99.182.4
159.224.58.201
163.172.128.82
163.172.16.89
165.255.102.74
168.121.105.75
168.195.2.195
168.195.2.209
168.228.150.164
168.232.127.168
171.114.125.53
171.212.141.108
171.231.166.147
175.0.248.154
175.163.67.154
175.169.74.229
176.96.10.253
177.11.121.84
177.11.123.83
177.126.233.43
177.129.243.50
177.135.205.13
177.83.184.118
178.162.199.197
178.162.199.93
178.162.205.2
178.162.205.30
178.46.125.56
178.46.57.194
178.64.187.67
178.70.254.88
18.248.7.33
180.120.246.234
180.171.161.175
180.213.12.141
180.97.221.56
182.100.67.119
182.100.67.40
182.147.199.246
182.40.48.139
182.54.220.110
182.55.140.90
182.91.107.40
183.102.89.242
183.135.255.52
183.156.9.104
183.203.19.14
183.46.20.188
183.93.194.81
183.93.195.151
183.93.200.36
183.93.248.181
183.93.253.160
183.94.193.230
185.56.82.66
185.69.53.169
187.1.142.2
188.119.201.63
188.16.121.154
188.16.83.243
188.17.2.202
188.178.124.210
188.19.192.99
188.212.100.149
188.213.174.190
189.14.35.99
189.85.54.30
190.153.217.26
190.25.187.219
191.17.246.191
191.190.221.158
191.253.207.7
191.96.249.8
192.40.95.5
195.128.56.105
195.20.3.210
196.210.27.201
197.248.27.226
199.115.228.94
199.19.104.171
200.229.159.197
200.37.166.83
201.16.246.198
202.112.237.226
202.66.39.100
203.130.45.23
203.144.197.50
203.93.239.4
208.107.64.238
209.161.5.167
210.200.142.100
210.3.175.126
211.193.41.122
211.24.114.45
212.124.21.188
212.129.17.101
212.129.26.141
212.144.230.242
212.199.110.253
212.235.126.222
212.83.149.82
212.83.187.106
213.14.7.202
216.108.232.25
217.196.20.44
217.23.4.45
217.60.67.75
218.109.249.123
218.16.129.142
218.3.140.74
218.65.30.124
218.7.221.241
218.71.228.102
218.83.155.86
218.87.109.153
218.91.153.179
219.141.247.16
219.142.69.132
219.142.69.134
219.155.113.8
219.82.22.0
220.174.132.131
220.178.78.130
220.179.138.72
221.175.92.220
221.194.44.225
221.204.224.54
221.207.236.189
221.210.200.245
221.229.196.191
222.101.189.100
222.122.20.132
222.122.20.210
222.132.156.3
222.182.55.28
222.186.51.138
222.239.10.143
222.239.10.238
222.47.26.18
222.73.51.233
24.148.27.42
27.154.136.239
31.162.207.84
31.162.40.3
31.162.9.166
31.163.250.98
31.163.51.127
31.170.38.50
31.173.90.61
31.181.54.72
31.192.106.210
31.192.213.205
31.207.85.90
35.160.80.166
36.101.5.70
36.80.33.139
37.21.1.224
37.228.132.202
37.29.83.21
37.58.58.214
39.162.180.45
39.165.136.137
39.174.253.198
39.182.145.55
41.211.9.138
42.114.135.201
42.184.140.181
42.202.52.199
42.51.8.227
42.98.205.66
42.98.254.15
42.98.254.199
45.76.222.225
45.76.97.164
46.165.210.13
46.165.251.148
46.165.251.162
46.166.186.219
46.189.129.47
46.48.190.140
49.117.150.44
49.64.4.39
49.73.131.125
49.73.170.73
5.139.196.189
5.14.20.29
5.140.155.118
5.141.150.56
5.143.255.188
5.153.234.90
5.45.79.26
52.163.60.33
52.197.225.171
58.205.211.35
58.210.110.205
59.108.99.172
59.11.107.82
59.174.84.193
59.175.137.82
59.3.75.16
59.5.175.152
59.63.166.81
59.63.188.3
60.184.101.148
60.21.162.7
60.215.42.218
60.220.85.216
61.135.193.158
61.136.166.130
61.143.152.14
61.143.152.2
61.182.170.38
61.233.76.154
61.237.231.103
61.50.187.51
62.16.157.209
62.189.82.93
63.143.75.75
66.168.224.45
67.205.159.51
68.119.44.149
72.12.210.26
77.109.137.32
80.13.19.206
80.179.223.42
80.19.227.68
80.251.113.138
81.17.20.98
81.171.85.90
83.172.34.183
84.121.83.39
84.57.28.39
85.17.80.229
85.173.78.166
85.234.1.126
86.109.193.66
86.169.209.74
88.132.98.229
89.97.55.33
90.189.190.93
90.60.6.218
91.211.208.78
91.219.28.221
91.224.160.108
91.224.161.88
92.222.74.92
93.103.122.242
93.103.152.125
93.39.252.194
93.72.223.62
93.78.255.73
94.241.240.134
94.50.240.68
94.50.245.136
94.50.253.135
94.51.137.139
94.51.43.180
95.188.131.155
95.189.169.248
95.189.54.20
95.83.50.143
95.83.55.171