School of Computing. Dublin City University.
Online coding site: Ancient Brain
coders JavaScript worlds
Package:
Can use these classes to (a) communicate with any server, (b) construct your own server.import java.net.*;
From Graba:
import java.net.*; import java.io.*; public class ip { public static void main ( String[] args ) throws IOException { String hostname = args[0]; try { InetAddress ipaddress = InetAddress.getByName(hostname); System.out.println("IP address: " + ipaddress.getHostAddress()); } catch ( UnknownHostException e ) { System.out.println("Could not find IP address for: " + hostname); } } }
Run it:
$ javac ip.java $ java ip www.computing.dcu.ie IP address: 136.206.217.26 |
Q. Write program to find hostname given IP.
Note getByName() is flexible in its input.
See DNS lookup.
In general:
My local host is not to be confused with: 127.0.0.1
Does this by trying to open a socket to that port.
import java.net.*; import java.io.*; public class ports { public static void main ( String[] args ) throws IOException { String hostname = args[0]; Socket s = null; try { // this is to see if host exists: InetAddress ipaddress = InetAddress.getByName(hostname); // int p = 21; // ftp // int p = 22; // ssh / sftp // int p = 23; // telnet // int p = 25; // smtp int p = 80; // http // int p = 110; // pop3 // int p = 143; // imap try { s = new Socket(hostname, p); System.out.println("A server is running on port " + p + "."); s.close(); } catch (IOException e) { System.out.println("No server on port " + p + "."); } } catch ( UnknownHostException e ) { System.out.println("Could not find host: " + hostname); } if (s != null) { try { s.close(); } catch ( IOException ioEx ) { } } } }
Can now look for http servers:
$ java ports www.dcu.ie A server is running on port 80. $ java ports dgrayweb.computing.dcu.ie A server is running on port 80. $ java ports mailhost.computing.dcu.ie A server is running on port 80. |
POP3 servers:
$ java ports mailhost.computing.dcu.ie A server is running on port 110. |
Search for IMAP servers.
Search for ssh servers from outside DCU for:
e.g. Get instructions for How to email me:
// HTTP GET through socket, not through "URL" class import java.net.*; import java.io.*; public class sget { public static void main ( String[] args ) throws IOException { Socket s = null; try { String host = "humphryscomputing.com"; String file = "/howtomailme.html"; int port = 80; s = new Socket(host, port); OutputStream out = s.getOutputStream(); PrintWriter outw = new PrintWriter(out, false); outw.print("GET " + file + " HTTP/1.0\r\n"); outw.print("Accept: text/plain, text/html, text/*\r\n"); outw.print("\r\n"); outw.flush(); InputStream in = s.getInputStream(); InputStreamReader inr = new InputStreamReader(in); BufferedReader br = new BufferedReader(inr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } // br.close(); // Q. Do I need this? } catch (UnknownHostException e) {} catch (IOException e) {} if (s != null) { try { s.close(); } catch ( IOException ioEx ) {} } } }
From:
flush() - send this now.
TCP sends a variable number of bytes.
It may buffer bytes (to collect a larger amount) before sending.
flush() tells it to send what it has now.
Output:
$ java sget HTTP/1.1 200 OK Date: Tue, 26 Mar 2013 21:51:59 GMT Server: Apache/2.2.3 (Unix) DAV/2 mod_ssl/2.2.3 OpenSSL/0.9.8l PHP/5.2.6 SVN/1.6.12 Accept-Ranges: bytes Content-Type: text/html (the URL content) |
HTTP headers.
Request - sent by client.
Response - returned by server.
$ telnet www.computing.dcu.ie 80 GET /index.html HTTP/1.1 Host: www.computing.dcu.ie |
(blank line to end header)
You can study the commands of any other
service
and write a client for that too.
Use a socket to connect to the port
and then send the appropriate commands.
From The Java Developers Almanac:
// download text content of URL import java.net.*; import java.io.*; public class jget { public static void main ( String[] args ) throws IOException { try { URL url = new URL( args[0] ); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String str; while ((str = in.readLine()) != null) { System.out.println(str); } in.close(); } catch (MalformedURLException e) {} catch (IOException e) {} } }
e.g. Get the page on How to email me:
$ java jget "https://humphryscomputing.com/howtomailme.html"
Q. Download to file.
Q. Can you parse it to extract email address?
// get the HTTP headers import java.net.*; import java.io.*; public class jhttp { public static void main ( String[] args ) throws IOException { try { URL url = new URL( args[0] ); URLConnection c = url.openConnection(); for (int i=0; ; i++) { String name = c.getHeaderFieldKey(i); String value = c.getHeaderField(i); if (name == null && value == null) // end of headers { break; } if (name == null) // first line of headers { System.out.println("Server HTTP version, Response code:"); System.out.println(value); System.out.print("\n"); } else { System.out.println(name + "=" + value); } } } catch (Exception e) {} } }
Output:
Server HTTP version, Response code: HTTP/1.1 200 OK Date=Mon, 22 Nov 2004 11:43:09 GMT Server=Apache/2.0.47 (Unix) PHP/5.0.2 Last-Modified=Thu, 18 Nov 2004 10:32:20 GMT ETag="19495e-3cd-e7abf500" Accept-Ranges=bytes Content-Length=973 Keep-Alive=timeout=15, max=100 Connection=Keep-Alive Content-Type=text/html; charset=ISO-8859-1 |
import java.net.*; import java.io.*; public class hrc { public static void main ( String[] args ) throws Exception { try { URL url = new URL( args[0] ); HttpURLConnection c = (HttpURLConnection) url.openConnection(); System.out.println( c.getResponseCode() ); } catch (Exception e) {} } }
Output:
$ java hrc "https://humphrysfamilytree.com/surnames.html" 200 $ java hrc "https://humphrysfamilytree.com/djkjkjkll" 404 $ java hrc "https://humphrysfamilytree.com/Icons/" 403 $ java hrc "http://ddfdfdjjdg.com/surnames.html" (Exception) |
https://www.computing.dcu.ie/BADPAGE will give something like:
Server HTTP version, Response code: HTTP/1.1 404 Not Found Date=Mon, 22 Nov 2004 12:15:27 GMT Server=Apache/2.0.47 (Unix) PHP/5.0.2 Content-Length=318 Keep-Alive=timeout=15, max=100 Connection=Keep-Alive Content-Type=text/html; charset=iso-8859-1 |
Q. Write a program to check if a URL exists and return yes/no.
https://humphryscomputing.com/BADPAGEDo you get response 404 or 200?
Solutions:
On Windows:
$ java "-Dhttp.agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" prog |
On Linux:
$ java -Dhttp.agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" prog |