aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSina Ghaderi <sina@snix.ir>2021-03-03 12:14:34 +0330
committerSina Ghaderi <sina@snix.ir>2021-03-03 12:14:34 +0330
commit089a22141be6e685ac051f2cf7767c3adf7ba44d (patch)
tree7bbe3f36d483b37e78604392acc0cc5648d39aaf
pushing to github ...
-rw-r--r--Readme.md44
-rw-r--r--cdrom.go48
-rwxr-xr-xdumrombin0 -> 3114935 bytes
-rw-r--r--go.mod3
-rw-r--r--vendor/networks/action.go59
-rw-r--r--vendor/somecall/somecalls.go72
-rw-r--r--vendor/sysexit/sysexit.go37
7 files changed, 263 insertions, 0 deletions
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..02b83da
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,44 @@
+# Dummy CDROM Ejector
+Ok, This is one of the stupid idea that cross my mind. a service to remotely eject your system cdrom :D
+Obviously this is totally useless, it's just for fun, this just work on linux.
+
+### Compile And Run
+For building this, you need to install golang `apt install golang` or checkout [official website](https://golang.org)
+```
+# git clone https://github.com/sina-ghaderi/romdum
+# cd romdum
+# go build
+# ./romdum --net 0.0.0.0:9940 --dev /dev/cdrom
+info: application is listening on address 0.0.0.0:9940
+...
+
+```
+
+Next connect the server using netcat a.k.a `nc`
+
+```
+# nc 127.0.0.1 9940
+help banner for this terminal: system cdrom --> type 1 to eject and 0 to rollin
+1
+operation completed successfully, check the cdrom.
+0
+operation completed successfully, check the cdrom.
+...
+```
+
+### Help And Licence
+```
+# ./dumrom -h
+usage of dummy cdrom-dvdrom ejector server:
+./dumrom --net [ipv4:port] --dev <rom block device>
+options:
+ --net string tcp network to listen on <ipv4:port> (default "127.0.0.1:9940")
+ --dev string rom block device to mess with. (default is /dev/cdrom)
+ --h print this banner and exit
+example:
+ ./dumrom --net 0.0.0.0:9940 --dev /dev/cdrom
+
+Copyright (c) 2021 blg.snix.ir, All rights reserved.
+Developed BY sina@snix.ir --> FYI: this is just for fun and totally useless :D
+This work is licensed under the terms of the MIT license.
+```
diff --git a/cdrom.go b/cdrom.go
new file mode 100644
index 0000000..7b2d2b0
--- /dev/null
+++ b/cdrom.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "errors"
+ "flag"
+ "fmt"
+ "log"
+ "networks"
+ "os"
+ "runtime"
+ "somecall"
+ "sysexit"
+)
+
+func main() {
+
+ if runtime.GOOS != "linux" {
+ fmt.Println("this application is supposed to run on linux, can't do anything here... \nexiting with status 0")
+ return
+ }
+ defer sysexit.HandlePan()
+ log.SetFlags(0)
+ flag.Usage = flagusg
+ laddrs := flag.String("net", "127.0.0.1:9940", "server tcp listen address")
+ udevpath := flag.String("dev", "/dev/cdrom", "rom block device to mess with")
+ flag.Parse()
+ if somecall.Getuid() != 0 {
+ panic(sysexit.Errsig{Why: errors.New("without superuser access this application cant do anything"), Cod: 1, Pid: somecall.Getpid()})
+ }
+ somecall.UDEVLINK = *udevpath
+ networks.NetListen(*laddrs)
+}
+
+func flagusg() {
+ fmt.Printf(`usage of dummy cdrom-dvdrom ejector server:
+%v --net [ipv4:port] --dev <rom block device>
+options:
+ --net string tcp network to listen on <ipv4:port> (default "127.0.0.1:9940")
+ --dev string rom block device to mess with. (default is /dev/cdrom)
+ --h print this banner and exit
+example:
+ %v --net 0.0.0.0:9940 --dev /dev/cdrom
+
+Copyright (c) 2021 blg.snix.ir, All rights reserved.
+Developed BY sina@snix.ir --> FYI: this is just for fun and totally useless :D
+This work is licensed under the terms of the MIT license.
+`, os.Args[0], os.Args[0])
+}
diff --git a/dumrom b/dumrom
new file mode 100755
index 0000000..4127c56
--- /dev/null
+++ b/dumrom
Binary files differ
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..d0e57c9
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module dumrom
+
+go 1.15
diff --git a/vendor/networks/action.go b/vendor/networks/action.go
new file mode 100644
index 0000000..4b7caed
--- /dev/null
+++ b/vendor/networks/action.go
@@ -0,0 +1,59 @@
+package networks
+
+import (
+ "bufio"
+ "fmt"
+ "net"
+ "somecall"
+ "sysexit"
+)
+
+// NetListen ...
+func NetListen(listenaddr string) {
+ l, err := net.Listen("tcp", listenaddr)
+ if err != nil {
+ panic(sysexit.Errsig{Why: err, Cod: 1, Pid: somecall.Getpid()})
+ }
+
+ defer l.Close()
+ sysexit.Inform("application is listening on address", listenaddr)
+ for {
+ conn, err := l.Accept()
+ if err != nil {
+ sysexit.Inform(err.Error())
+ continue
+ }
+
+ go cachethecon(conn)
+ }
+
+}
+
+func cachethecon(con net.Conn) {
+ defer func() {
+ con.Close()
+ sysexit.Inform(con.RemoteAddr(), "connection closed by peer")
+ }()
+
+ sysexit.Inform(con.RemoteAddr(), "connection established")
+ if _, err := con.Write([]byte("help banner for this terminal: system cdrom --> type 1 to eject and 0 to rollin \n")); err != nil {
+ sysexit.Inform(err.Error())
+ return
+ }
+ scanner := bufio.NewScanner(con)
+ for scanner.Scan() {
+ if makeanaction, ok := somecall.TakeAction[scanner.Text()]; ok {
+ if err := makeanaction(somecall.UDEVLINK); err != nil {
+ fmt.Fprintln(con, "fatal error: "+err.Error())
+ continue
+ }
+ fmt.Fprintln(con, "operation completed successfully, check the cdrom.")
+ continue
+ }
+ fmt.Fprintln(con, "fatal error: unknow input parameters, please input either 1 or 0")
+ }
+ if err := scanner.Err(); err != nil {
+ sysexit.Inform(err.Error())
+ return
+ }
+}
diff --git a/vendor/somecall/somecalls.go b/vendor/somecall/somecalls.go
new file mode 100644
index 0000000..2feba57
--- /dev/null
+++ b/vendor/somecall/somecalls.go
@@ -0,0 +1,72 @@
+package somecall
+
+import (
+ "os"
+ "syscall"
+ "sysexit"
+)
+
+// lets make some calls for you ;) pull a few strings.. and see whats happened
+const (
+ SYSCDROMEJECTSW = 0x530f
+ SYSCDROMEJECT = 0x5309
+ CDROMCLOSETRAY = 0x5319
+)
+
+// UDEVLINK --> change this if u want mess with another device
+var UDEVLINK string
+
+// Getpid ...
+func Getpid() uintptr {
+ pid, _, err := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0)
+ if err != 0 {
+ panic(sysexit.Errsig{Why: os.NewSyscallError("SYS_GETPID", err), Cod: 1})
+ }
+ return pid
+}
+
+// Getuid ...
+func Getuid() uintptr {
+ uid, _, err := syscall.Syscall(syscall.SYS_GETUID, 0, 0, 0)
+ if err != 0 {
+ panic(sysexit.Errsig{Why: os.NewSyscallError("SYS_GETPID", err), Cod: 1})
+ }
+ return uid
+}
+
+// TakeAction ...
+var TakeAction = map[string]func(device string) error{
+ "1": func(device string) error {
+ rom, err := os.OpenFile(device, syscall.O_RDONLY|syscall.O_NONBLOCK, 0666)
+ if err != nil {
+ return err
+ }
+ defer rom.Close()
+
+ _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, rom.Fd(), uintptr(SYSCDROMEJECT), 0)
+ if errno != 0 {
+ return os.NewSyscallError("SYS_IOCTL", errno)
+ }
+ _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, rom.Fd(), uintptr(SYSCDROMEJECT), 0)
+ if errno != 0 {
+ return os.NewSyscallError("SYS_IOCTL", errno)
+ }
+
+ return nil
+
+ },
+ "0": func(device string) error {
+ rom, err := os.OpenFile(device, syscall.O_RDONLY|syscall.O_NONBLOCK, 0666)
+ if err != nil {
+ return err
+ }
+ defer rom.Close()
+
+ _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, rom.Fd(), uintptr(CDROMCLOSETRAY), 0)
+ if errno != 0 {
+ return os.NewSyscallError("SYS_IOCTL", errno)
+ }
+
+ return nil
+ },
+}
diff --git a/vendor/sysexit/sysexit.go b/vendor/sysexit/sysexit.go
new file mode 100644
index 0000000..f98303e
--- /dev/null
+++ b/vendor/sysexit/sysexit.go
@@ -0,0 +1,37 @@
+package sysexit
+
+import (
+ "fmt"
+ "log"
+ "os"
+)
+
+const (
+ reset string = "\033[0m"
+ erred = "\033[31m"
+ yello = "\033[33m"
+)
+
+// Errsig ...
+type Errsig struct {
+ Why error
+ Cod int
+ Pid uintptr
+}
+
+//HandlePan ...
+func HandlePan() {
+ if hap := recover(); hap != nil {
+ if ms, owkey := hap.(Errsig); owkey {
+ fmt.Println(erred+"fatal:"+reset, ms.Why, "\nprocess", ms.Pid, "exit with ststus", ms.Cod)
+ os.Exit(ms.Cod)
+ }
+ panic(hap)
+ }
+}
+
+// Inform ...
+func Inform(h ...interface{}) {
+ h = append([]interface{}{(yello + "info:" + reset)}, h...)
+ log.Println(h...)
+}

Snix LLC Git Repository Holder Copyright(C) 2022 All Rights Reserved Email To Snix.IR