Guest User

Untitled

a guest
Sep 27th, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. use std::io::{Read,Write};
  2. use std::net::{TcpListener,TcpStream};
  3. use std::thread;
  4.  
  5. fn read_str (stream: &mut TcpStream) -> String {
  6. let mut buf = vec![0u8; 256];
  7. let x = stream.read(&mut buf).unwrap();
  8.  
  9. println!("read {} bytes", x);
  10. if buf[x-2] == b'\r' && buf[x-1] == b'\n' {
  11. // ...
  12. } else {
  13. panic!("single read not CRLF terminated: {:?}", buf);
  14. }
  15.  
  16. let str = String::from_utf8_lossy(&buf[0..x-2]);
  17. return str.into_owned();
  18. }
  19.  
  20. fn say_hello (stream: TcpStream) {
  21. let mut stream = stream;
  22. stream.write(b"[GWIZ] v15.11.17 - defense systems online\r\n").unwrap();
  23.  
  24. for _ in 0..3 {
  25. stream.write(b"username: ").unwrap();
  26. let uname = read_str(&mut stream);
  27.  
  28. stream.write(b"password: ").unwrap();
  29. let pword = read_str(&mut stream);
  30. println!("login attempt <{}> / <{}>", uname, pword);
  31.  
  32. if uname == "rjbs" && pword == "secret" { return spill_guts(stream) }
  33.  
  34. stream.write(b"invalid login\r\n").unwrap();
  35. }
  36.  
  37. stream.write(b"too many attempts\r\n").unwrap();
  38. }
  39.  
  40. fn spill_guts (stream: TcpStream) {
  41. let mut stream = stream;
  42. stream.write(b"launch codes: 123456\r\n").unwrap();
  43. }
  44.  
  45. fn main() {
  46. let listen = "127.0.0.1:9999";
  47. let listener = TcpListener::bind( &listen )
  48. .ok()
  49. .expect( &format!("can't bind to {}!", listen) );
  50.  
  51. println!("listening started, ready to accept");
  52.  
  53. for stream in listener.incoming() {
  54. thread::spawn(move || say_hello(stream.unwrap()) );
  55. }
  56. }
Add Comment
Please, Sign In to add comment