androidでelixir その3

# 概要
androidでelixirやってみる。
練習問題やってみた。

# 練習問題
shellserverを起動して、パソコンから、調査せよ。

# 方針
- ssh使わない。
- vnc使わない。
- 内蔵のターミナル使う。
- chrome使う。
- nano使う。
- ifconfig使う。
- tcpポートは、5300番。

# 手順

# nanoとifconfigをインストール。

```
sudo apt install nano
sudo apt install net-tools
```

# ipアドレス取得

```
ifconfig
```

192.168.0.102

# フォルダを掘る。

```
mkdir elixir
cd elixir
```

# mix new する。

```
mix new hello
cd hello
mix test
```

# shellserverをコピー

このページをchromeで開く。

```
defmodule Hello do
  @moduledoc """
  Documentation for Hello.
  """

  @doc """
  Hello world.

  ## Examples

      iex> Hello.hello
      :world

  """
  def hello do
    :world
  end
	require Logger
	use GenServer
	@port 5300
	def start do
		GenServer.start(__MODULE__, %{socket: nil})
	end
	def init(state) do
		{:ok, socket} = :gen_tcp.listen(@port, [:binary, active: true])
		send(self(), :accept)
		Logger.info "Listenn port: #{@port}"
		{:ok, %{state | socket: socket}}
	end
	def handle_info(:accept, %{socket: socket} = state) do
		{:ok, _} = :gen_tcp.accept(socket)
		Logger.info "Connected"
		{:noreply, state}
	end
	def handle_info({:tcp, socket, data}, state) do
		Logger.info "Received: #{String.length(data)}"
		Logger.info data
		Logger.info "Send"
		{result, 0} = System.shell(data)
		:ok = :gen_tcp.send(socket, result)
		:gen_tcp.close(socket)
		send(self(), :accept)
		{:noreply, state}
	end
	def handle_info({:tcp_closed, _}, state) do
		Logger.info "Close"
		{:stop, :normal, state}
	end
	def handle_info({:tcp_error, _}, state) do
		Logger.info "Error"
		{:stop, :normal, state}
	end
	def run() do
		cmd = IO.gets "> "
		{:ok, socket} = :gen_tcp.connect('localhost', 5300, [:binary, active: false])
		:ok = :gen_tcp.send(socket, cmd)
		{:ok, data} = :gen_tcp.recv(socket, 0)
		data
		|> IO.puts
		run()
	end
	def main(args \\ "") do
		Hello.start
		run()
	end
end


```

コードをコピー

# nanoでlib/hello.exを開く。

```
nano lib/hello.ex
```

コードをペースト。

# iex起動

```
iex -S mix
```

# shellserver起動

```
Hello.main
```

# パソコンから、クライアント起動、調査する。

```
>tcp1

> ls
README.md
_build
lib
mix.exs
test


> pwd


> ls /
Sever not available!


> ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1  (UNSPEC)
        RX packets 2853  bytes 249628 (249.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2853  bytes 249628 (249.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.102  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::220:22ff:fea0:1255  prefixlen 64  scopeid 0x20<link>
        inet6 2404:7a83:6460:a760:55ee:aa7d:bf95:ddc4  prefixlen 64  scopeid 0x0<global>
        inet6 2404:7a83:6460:a760:220:22ff:fea0:1255  prefixlen 64  scopeid 0x0<global>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 3000  (UNSPEC)
        RX packets 29073  bytes 31897928 (31.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11143  bytes 2547048 (2.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



> cat /proc/cpuinfo


> uname -a
Sever not available!


> df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       25752372 4409520  21195396  18% /


> mount


> dpkg
Sever not available!


```

# クライアントは、これ。

https://qiita.com/ohisama@github/items/2c9459a5b73afbe8440c


以上。