我有一个迷你侦听器/守护程序来捕获SNMP陷阱。这将在 tomcat7 上运行主项目(Spring网站)时执行侦听器。但我总是得到错误 java.net.绑定异常: 权限被拒绝
我尝试使用Authbind(http://java-notes.com/),但我的问题没有解决。我也尝试将端口更改为更大的端口,但我收到错误java.net.BindException:无法分配请求的地址
这是我的应用程序/陷阱接收器代码:
@Component
public class TrapReceiver extends Thread implements CommandResponder {
@Inject
private ApplicationContext applicationContext;
@Inject
private Executor executor;
public TrapReceiver(){
}
List<PDUv1> listPdu = new ArrayList<PDUv1>();
String message = "";
long totReceivedTrap = 0;
@PostConstruct
public void init() {
System.out.println("Running trap listener");
this.start();
}
public synchronized void processPdu(CommandResponderEvent cmdRespEvent) {
PDUv1 pdu = (PDUv1) cmdRespEvent.getPDU();
listPdu.add(pdu);
if (pdu != null) {
if(listPdu.size() == 10){ //10 trap per thread
List<PDUv1> temp = new ArrayList<PDUv1>();
temp.addAll(listPdu);
TrapInsertor trapInsertor = (TrapInsertor) applicationContext.getBean("trapInsertor");
trapInsertor.setProperty(temp);
executor.execute(trapInsertor);
listPdu.clear();
}
}
}
public void run() {
while (true) {
try {
this.listen(new UdpAddress(getIp()+"/162")); //alamat PDU akan listen
} catch (Exception e) {
e.printStackTrace();
}
}
}
public synchronized void listen(TransportIpAddress address)
throws IOException {
AbstractTransportMapping transport;
if (address instanceof TcpAddress) {
transport = new DefaultTcpTransportMapping((TcpAddress) address);
} else {
transport = new DefaultUdpTransportMapping((UdpAddress) address);
}
ThreadPool threadPool = ThreadPool.create("DispatcherPool", 10);
MessageDispatcher mDispathcher = new MultiThreadedMessageDispatcher(
threadPool, new MessageDispatcherImpl());
// add message processing models
mDispathcher.addMessageProcessingModel(new MPv1());
mDispathcher.addMessageProcessingModel(new MPv2c());
// add all security protocols
SecurityProtocols.getInstance().addDefaultProtocols();
SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES());
// Create Target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
Snmp snmp = new Snmp(mDispathcher, transport);
snmp.addCommandResponder(this);
transport.listen();
System.out.println("Listening on " + address);
try {
this.wait();
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
//fungsi untuk mendapatkan real ip local (bukan 127.0.0.1)
public static String getIp(){
String ipAddress = null;
Enumeration<NetworkInterface> net = null;
try {
net = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
throw new RuntimeException(e);
}
while(net.hasMoreElements()){
NetworkInterface element = net.nextElement();
Enumeration<InetAddress> addresses = element.getInetAddresses();
while (addresses.hasMoreElements()){
InetAddress ip = addresses.nextElement();
if (ip instanceof Inet4Address){
if (ip.isSiteLocalAddress()){
ipAddress = ip.getHostAddress();
}
}
}
}
return ipAddress;
}
}
权限被拒绝是一个常见的异常,这意味着当前用户没有足够的访问权限打开端口。一种解决方案是,如果您将端口号更改为大于1024,则低于1024的端口称为特权端口,在Linux(以及大多数UNIX风格和类UNIX系统)中,任何非root用户都不允许打开这些端口。
您应该使用超出 1024 范围的端口,因为它们是特权端口。尝试使用 1048 并在提供 SNMP 管理器详细信息时在应用程序中配置相同的端口。
您需要root
才能绑定到Linux系统上的低端口。请确保以足够的权限运行Java应用程序。连接到高位端口时,请确保它尚未被其他进程/服务使用。
另请参阅绑定到 Debian/Ubuntu 上的特权端口,了解如何在 Ubuntu 上启用 AUTHBIND
。
本文向大家介绍Laravel 将单例绑定到服务容器,包括了Laravel 将单例绑定到服务容器的使用技巧和注意事项,需要的朋友参考一下 示例 我们可以将一个类绑定为Singleton: 这样,第一次将实例 'my-database'请求到服务容器时,将创建一个新实例。该类的所有后续请求都将返回第一个创建的实例:
请帮忙...!!
[eclipse-jetty]无法在端口9,091上启动jetty服务器:无法分配请求的地址 我正在使用jetty HTTP服务器发布REST Web服务。 配置: 服务器-ip : 20.121.21.22 端口: 8081 对于上述配置,它抛出以下异常。 org.apache.cxf.service.factory.ServiceConstructionException 原因:org . A
问题内容: 我要对服务器进行编程,但是想知道我的想法是否可能。我的程序将在多个端口上输出到多个客户端-每个端口都可以由多个客户端访问。 通常,我会使用线程套接字服务器,但是在这种情况下,我需要它可用于多个端口。我想到的用法是下面一个模糊的伪代码: 启动服务器 侦听多个端口上的传入连接 识别正在连接的端口 如果是端口1,请启动一个线程以侦听客户端并输出消息类型 如果是端口2,请启动一个线程以侦听客户
为主机绑定容器端口 默认情况下,Docker容器可以连接到外部区域,但外部区域不能连接到容器。在Docker启动时,由于它在主机上创建了一个iptables伪装规则,使得每一个输出连接看起来都是由主机IP地址建立起来的。 # You can see that the Docker server creates a # masquerade rule that let containers conn
我在服务器(gae)中创建数据,并希望将其存储在BlobStore中。我看到了很多关于如何实现这一点的答案给客户机一个BlobStore URL,但是没有客户机或HTTP请求:这只是一个异步任务。 > 那么我想我应该使用createUploadUrl(),而不是将此URL提供给客户机,而是通过URL获取从我的代码HTTP将数据发布给它。这看起来很奇怪,不是有另外一个API吗? 假设我想要在Blob