diff options
author | Olivier Gayot <olivier.gayot@sigexec.com> | 2020-01-09 12:17:45 +0100 |
---|---|---|
committer | Olivier Gayot <olivier.gayot@sigexec.com> | 2020-01-09 14:38:41 +0100 |
commit | 1973427f962122ab6dc251546f20393a2be33e5b (patch) | |
tree | 755df4955aecd3d7bcb578afe20de6d971487192 | |
parent | 40f7bd6e1f0bc2926c8884b5ef55ac6fe40b22ed (diff) |
First attempt
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | netcat.ml | 16 |
2 files changed, 32 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6af2f74 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +SRC = $(wildcard *.ml) +OBJ = $(SRC:.ml=.cmo) +PROG = prog + + +all: $(PROG) + + +$(PROG): $(OBJ) + ocamlc -o $@ unix.cma $^ + + +%.cmo: %.ml + ocamlc -o $@ -c $^ + +.PHONY: all diff --git a/netcat.ml b/netcat.ml new file mode 100644 index 0000000..53c9521 --- /dev/null +++ b/netcat.ml @@ -0,0 +1,16 @@ +(** Connect to addr and port and start communicating **) +let nc addr port = + let rec discuss csock = + let buffer = Bytes.create 5 in + let n = Unix.recv csock buffer 0 (Bytes.length buffer) [] in + match n with + | 0 -> () + | _ -> ignore (Unix.write Unix.stdout buffer 0 n); discuss csock + in + let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in + Unix.connect sock (Unix.ADDR_INET (Unix.inet_addr_of_string addr, port)); + discuss sock + +let () = match Array.length Sys.argv with +| 3 -> nc Sys.argv.(1) (int_of_string Sys.argv.(2)) +| _ -> raise (Failure "Usage error") |