이 내용은 http://blog.naver.com/jongwon0320/100190851814 이 원본입니다. * 1. 라이브러리 추가 아래 소스를 라이브러리 파일로 Export 하신 후에 [wowza-dir]/lib 폴더로 옮겨 놓으시고 * 2. Application.xml config 수정 모듈을 적용할 Application.xml 파일을 열고 publisherIPBlockingModule publisherIPBlockingModule com.gscdn.mycompany.wowza.PublisherIPBlockingModule 모듈 부분에 추가해줍니다. * 3. iplist 파일 생성 모듈을 적용한 어플리케이션의 [wowza-dir]/conf/[application_name]/ 폴더에 publishiplist 파일을 생성 후 아이피를 적어줍니다. 아이피 구분은 행으로 하며 아이피 앞에 "#" 표시가 있다면 주석처리로 간주합니다.(그 아이피는 제외한단 말이죠 ^^) package com.mycompany.plugin.wowza; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import com.wowza.wms.amf.AMFDataList; import com.wowza.wms.application.IApplicationInstance; import com.wowza.wms.client.IClient; import com.wowza.wms.module.ModuleBase; import com.wowza.wms.request.RequestFunction; public class PublisherIPBlockingModule extends ModuleBase { private String _configFileDir = "/usr/local/WowzaMediaServer/conf/"; private String _configFileName = "publishiplist"; public void onAppStart(IApplicationInstance appInstance){ _configFileDir += appInstance.getApplication().getName() + "/"; } public void publish(IClient client, RequestFunction function, AMFDataList params) { getLogger().info("Overriding Publish"); boolean reject = true; List ipList = getAllowIPList(); try{ String clientIP = client.getIp(); for(int i = 0; i < ipList.size(); i++){ if (clientIP.equalsIgnoreCase(ipList.get(i).trim())){ reject = false; } } }catch(Exception ex){ reject = true; } if(reject){ sendClientOnStatusError(client, "NetStream.Publish.Denied", "The publisher's IP was rejected"); getLogger().info("Client Rejected. IP: " + client.getIp()); }else{ invokePrevious(client, function, params); } } public void releaseStream(IClient client, RequestFunction function, AMFDataList params) { getLogger().info("Overriding streamRelease"); boolean reject = true; List ipList = getAllowIPList(); try{ String clientIP = client.getIp(); for(int i = 0; i < ipList.size(); i++){ if(clientIP.equalsIgnoreCase(ipList.get(i).trim())){ reject = false; } } }catch(Exception ex){ reject = true; } if(reject){ sendClientOnStatusError(client, "NetStream.Publish.Denied", "The publisher's IP was rejected"); getLogger().info("Client Rejected. IP: " + client.getIp()); }else{ invokePrevious(client, function, params); } } public List getAllowIPList(){ List ipList = new ArrayList(); File confFile = new File(_configFileDir, _configFileName); String ip = null; try{ if(confFile.exists()){ if(confFile.isFile() && confFile.canRead()){ Scanner sc = new Scanner(confFile); while(sc.hasNext()){ ip = sc.next().trim(); if(ip.startsWith("#")) continue; ipList.add(ip); } sc.close(); }else{ getLogger().info("config file does not File"); } }else{ getLogger().info("config file does not exist"); } }catch(Exception e){ getLogger().warn("Exception occured : " + e.toString()); return null; } return ipList; } }