LoginSignup
1
0

More than 1 year has passed since last update.

androidでelixir その3

Last updated at Posted at 2023-03-27

概要

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!


クライアントは、これ。

以上。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0