2 개의 인터페이스가있는 GNU/Linux 서버에 대한 루트 액세스 권한이 있습니다. 여리고와 HtmlUnit을 사용하여 일부 웹 페이지를 크롤링하고 있습니다. HTTP 연결에 사용할 인터페이스를 지정하고 싶습니다. 명령 줄이나 Java에서이 작업을 수행 할 수있는 방법이 있습니까?Java 응용 프로그램을 인터페이스에 바인딩
답변
Java에서는 소켓을 사용하려는 NIC의 로컬 IP 주소에 바인드해야합니다. 0.0.0.0을 사용하는 경우 ALL에 바인드됩니다. 원하는대로 사용하도록 지정되었습니다.
HTTP 연결에 사용할 인터페이스를 지정하고 싶습니다.
각 네트워크 인터페이스에는 고유 한 IP 주소가 있습니다. 인터페이스의 IP 주소에있는 포트에 연결하여 인터페이스에 바인딩합니다.
소켓에 액세스 할 수 없습니다. HtmlUnit에 URL을 제공하고 있습니다. IP 주소 + 포트에 바인딩 -
당신이 소켓을 사용하는 여부는 (URL
를 통해) 또는 HTTP 연결 (Socket
/InetAddress
를 통해), 당신은 동일한 방법을 사용합니다.
ip a
ip link show
/sbin/ifconfig -a
lshw -class network
사용 자바 (java.net.NetworkInterface
클래스) :
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
public class ListNIFs {
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets =
NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netIf : Collections.list(nets)) {
out.printf("Display name: %s\n", netIf.getDisplayName());
out.printf("Name: %s\n", netIf.getName());
Enumeration<InetAddress> inetAddresses = netIf.getInetAddresses();
for (InetAddress add : Collections.list(inetAddresses)) {
out.printf("Address: %s\n", add.getName().getAddress().getHostAddress());
}
displaySubInterfaces(netIf);
out.printf("\n");
}
}
static void displaySubInterfaces(NetworkInterface netIf) throws SocketException {
Enumeration<NetworkInterface> subIfs = netIf.getSubInterfaces();
for (NetworkInterface subIf : Collections.list(subIfs)) {
out.printf("\tSub Interface Display name: %s\n", subIf.getDisplayName());
out.printf("\tSub Interface Name: %s\n", subIf.getName());
Enumeration<InetAddress> inetAddresses = subIf.getInetAddresses();
for (InetAddress add : Collections.list(inetAddresses)) {
out.printf("\t Sub Interface Address: %s\n", add.getName().getAddress().getHostAddress());
}
}
}
}
인터페이스가 어떤 주소 (들)
사용 리눅스 명령이있는 결정,
HTML 단위 : IP 주소와 포트
를 지정하면 예,
HTMLUnit
의WebClient
를 호출하는 경우 :
:이com.gargoylesoftware.htmlunit.html.HtmlPage page = webClient.getPage("http://255.255.255.0:80/mypage"); java.net.URL url = new java.net.URL("http://255.255.255.0:80/mypage"); page = webClient.getPage(url); com.gargoylesoftware.htmlunit.WebRequest req = new com.gargoylesoftware.htmlunit.WebRequest(url, com.gargoylesoftware.htmlunit.HttpMethod.GET); page = webClient.getPage(req);
com.gargoylesoftware.htmlunit.WebClient webClient = new WebClient(); com.gargoylesoftware.htmlunit.html.HtmlPage page = webClient.getPage("http://mycompany.org/mypage");
후 다음 중 하나를 수행 할 수 있습니다
HTMLUnit
HttpWebConnection
:com.gargoylesoftware.htmlunit.HttpWebConnection conn = new com.gargoylesoftware.htmlunit.HttpWebConnection(webClient); java.net.URL url = new java.net.URL("http://255.255.255.0/mypage"); com.gargoylesoftware.htmlunit.WebRequest req = new com.gargoylesoftware.htmlunit.WebRequest(url, com.gargoylesoftware.htmlunit.HttpMethod.POST); com.gargoylesoftware.htmlunit.WebRequest resp = conn.getResponse(req);
코어 자바 : 옵션은 자원 (파일, 웹 페이지 등)에 연결하는 URL을 생성 HTTP 연결
에 대한 URL을 지정합니다. 호스트 문자열 (자동 DNS 조회) 또는 IP 주소와 함께 URL을 지정할 수 있습니다.(소켓 연결 용)
가 URL 문자열 (DNS 조회)
를 사용하여 IP 주소// 4 bytes: byte[] ip4Address = {101,119,11,106}; java.net.InetAddress addressObj = java.net.InetAddress.getByAddress(ip4Address); // or use ip6Address, 16 bytes (2001:0db8:85a3:0000:0000:8a2e:0370:7334): // Any hex value above 0x7f must be cast to byte, because byte is signed (-128 to 127) byte[] ip6Address = {0x20,0x01,0x0d,(byte)0xb8,(byte)0x85,(byte)0xa3,0x00,0x00,0x00,0x00,(byte)0x8a,0x2e,0x03,0x70,0x73,0x34};
사용의 InetAddress를 지정하려면 옵션 :
// does not encode URL for you (manually include %20, etc) java.net.URL url = new URL("http://255.255.255.20:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING"); java.net.URL url2 = new URL("http", "255.255.255.20", 80, "/docs/books/tutorial/index.html?name=networking#DOWNLOADING"); java.net.URL url3 = new java.net.URL("https://maps.google.com/maps?q=sydney"); java.net.URL url4 = new java.net.URL("https", "maps.google.com", 80, "/maps?q=sydney"); // does encoding of URL string for you java.net.URI uri5 = new URI("http", "example.com", "/hello world/", ""); java.net.URL url5 = uri2.toURL(); // Can then pass URL to HTMLUnit, or invoke yourself // (see Java Network Tutorial for details): java.net.URLConnection conn = url.openConnection(); java.net.HttpConnection httpConn = (HttpConnection)conn; // preconnection: call setAllowUserInteraction/setDoInput/setDoOutput/ // setIfModifiedSince/setUseCaches/setRequestProperty httpConn.connect(); // or getInputStream/getOutputStream/getContent/getHeaderField // postconnection: call getContentEncoding/getContentLength/getContentType // getDate/getExpiration/getLastModifed
코어 자바 : 선택적으로 포트를 추가 할 수 있습니다
java.net.InetAddress addressObj = java.net.InetAddress.getByName("www.google.com");
두 가지 방법이 있습니다.
자바에서, 키 포인트는 사용할 소스 주소를 지정하는 것입니다 호출 HttpConnection에 # open() 메서드 이전 :
의 InetAddress favourateAddr = InetAddress를 (바이트 [] {1,2,3, 4}); // 1.2.3.4는 사용하려는 NIC의 IP 주소입니다.
yourHTTPConnObj.setLocalAddress (favourateAddr);
// http 연결을 엽니 다. yourHTTPConnObj.open();
Linux에서는 NIC를 선택할 라우팅을 결정하는 것이 레이어 3 유틸리티입니다. 따라서 대상 주소를 사용하여 라우팅 테이블을 사용자 정의하여 연결을 강제로 시작해야합니다. 그것은 매우 간단합니다. 단 하나의 라우트 명령입니다. this link을 참조하십시오.
'sudo/sbin/route add -host 8.8.8.8 dev eth1'을 시도했습니다. 하지만 8.8.8.8에서 ping을 실행하면'Destination Host Unreachable'이됩니다. – mossaab
- 1. Java 응용 프로그램을 Cocoa 인터페이스
- 2. 특정 인터페이스에 NSURLConnection 바인딩
- 3. 소켓을 네트워크 인터페이스에 바인딩
- 4. FTP가 특정 인터페이스에 바인딩
- 5. Java Desktop을 클라우드 인터페이스에 연결
- 6. 특정 인터페이스에 제네릭 클래스 바인딩
- 7. 인터페이스에 웹 API 모델 바인딩
- 8. 잘못된 인터페이스에 대한 Netty 바인딩
- 9. Java 응용 프로그램을 배포
- 10. WildFly 10 Jways allways localhost 인터페이스에 바인딩
- 11. 응용 프로그램을 LINUX의 특정 네트워크 인터페이스에 바인드하는 방법은 무엇입니까?
- 12. 스프레드 시트를 엑셀로 vb.net 응용 프로그램을 인터페이스에 대한 의견
- 13. Java 예외가 전체 Java 응용 프로그램을 종료합니까?
- 14. Java 응용 프로그램을 애플릿으로 변환
- 15. Java 응용 프로그램을 bluemix에 배포
- 16. Java EE 응용 프로그램을 Wildfly
- 17. Java 응용 프로그램을 JSP에서 실행해야합니까?
- 18. Java 응용 프로그램을 래핑하는 방법
- 19. Java 응용 프로그램을 어떻게 실행합니까?
- 20. Java 응용 프로그램을 android로 변환합니다.
- 21. 특정 Java 응용 프로그램을 죽이려면
- 22. Java 응용 프로그램을 애플릿으로 변환
- 23. Java 응용 프로그램을 서비스로 실행
- 24. Java 응용 프로그램을 다시 시작하십시오.
- 25. Java 응용 프로그램을 배포하고 싶습니다.
- 26. java/mysql 응용 프로그램을 배포하십시오.
- 27. Java 응용 프로그램을 관리자로 실행해야합니까?
- 28. Java : 인터페이스에 WSDL 구문 분석하기
- 29. Wrap 그리드 ItemWeight 바인딩 Windows에서 응용 프로그램을
- 30. 바인딩 응용 프로그램을 호스팅 할 데이터베이스를 호스팅
소켓에 액세스 할 수 없습니다. HtmlUnit에 URL을 제공하고 있습니다. – mossaab
HtmlUnit Docu가 이것에 대해 뭐라 말 했나요? – Fildor
아무 것도. 그것은 Apache Commons HttpClient를 호출하는 것입니다. Jericho는이 라이브러리를 사용하지 않습니다. 나는이 도서관들의 구체적 세부 사항을 조사하려고하고 있지 않다. 내가하려는 일은 "안녕, 자바, 모든 IP 호출마다 IP 주소 A.B.C.D를 사용하는 게 어떨까요?" – mossaab