5/5(火)〜8(金) の学習ログです(主にvue.jsとセキュリティ、そしてC言語)

こんにちは、いつもありがとうございます。

家の作るカフェラテを気に入ってしまった安藤です。

 

まだまだ大変な状況は続いておりますが、僕の肌感ですが、徐々にこの状況に適応してきている方々が増えてきているように感じます。

 そう感じたのはここ数日。

もっと前から色々考えていたのだろうけど、改善改革に向けたアウトプットをする方が増えてきたように感じます。

逞しいと思い、すごいなと思います。なんか嬉しい感じもします。

感性、知性、行動力が活性化されているように思います。

自分ももっと頑張ろう!とエネルギーをもらっています。

前を向いて頑張る人は格好良いです。

周りの困っている人に寄り添って一緒に前を向こうとしている人はさらに格好良いです。

 

さて、今回の学習ログですが、

今までは主に、Vue.jsとセキュリティを学んできましたが、私の周りの素晴らしい方々からの助言を頂き、改めてC言語を学ぶことにしました。

なぜか分かりませんがすごくこわいです。なので、これをやりきる覚悟がまだ完全に定まりません。不思議な感覚です。

今までは視野を広げるフェーズでしたが、これからは深く深く掘っていくフェーズにすることを決めました。

スコップで深く掘ろうとすると、穴の直径は次第に広がっていくので、周辺の情報も拾いながら進めていこうと思います。

人がやらないこと、できないことにチャレンジして何か面白いことを5年以内に実現します。

一応ここで宣言しておこうと思います。まだ何も見えていませんが。笑

 

5/5(火)

◎Vue.js
APIを使ったqiitaの記事検索について

 

◎セキュリティについて
●公開情報の収集
ターゲットが自分から公開している情報
・ネットワーク情報
ドメイン情報
DNS情報
・会社情報
・求人情報
<ホームページ>
・URL
ドメインIPアドレス
・所在地
・役員名
・取引先
SNS
・フォロワー
・レビュー
・地図

得られた情報からさらに情報を収集
・電話番号で検索
・住所で検索
・「@ドメイン名」でメールを検索

媒体から収集
・TVコマーシャル
・折り込みチラシ
・WEBニュース

●ネットワーク情報の収集
ドメイン
ここから手に入る情報は、
IPアドレス
・使用しているネットワーク範囲(または上位プロバイダ)
DNS情報
・担当者情報(名前、所属、電話番号)

ドメイン情報>
「.jp」ドメインの場合 → JPRSWhoisサイト http://whois.jprs.jp/
ここのサイトから詳細を調べることができる

DNSからの情報収集
現在はDNSからは情報はほとんど得られない
指定したDNSサーバは管轄しているドメインの情報しか返さないのが正しい仕様

検索エンジンの活用
Googleでのテクニック
・AND検索 「 検索語句① 検索語句② 」  
・OR検索 「 検索語句① OR 検索語句② 」
・()を使用した検索 「 検索語句① ( 検索語句② OR 検索語句③ ) 」
・とは検索 「 検索語句とは 」
・特定語句の除外 「 検索したい語句 ー 除外したい語句 」
ワイルドカード検索 「 検索語句*検索語句 」
・フレーズ検索 「 “検索語句” 」

コマンド検索
・サイト内検索 「site:サイトTOPのURL 検索語句」
・タイトル検索 「intitle: 検索語句」
・本文内検索 「intext: 検索語句」
・URL検索 「inurl:  検索語句」
・リンク検索 「link: 検索語句」
・ファイルタイプ検索 「filetype:  ファイル拡張子 検索語句」
・キャッシュ検索 「cache:URLからhttp://を除く」
・インフォ検索 「info:URLからhttp://を除く」
・関連検索 「related:URL」

SNSを利用した情報収集
facebookの勤務先を上手く使うと、facebookが勝手に「知り合いかも」と情報をくれる。
SNSは情報の宝庫

 

 

5/6(水)

◎セキュリティについて
<スキャニング技術>
●サーバの特定
●ネットワークトポロジ
●スキャニング手法
ポートスキャン → ターゲットサーバが稼働しているオープンポート(稼働しているサービス)を特定すること
・ポートの数は65,535個
・ウェルノンポートだけでも1,024個
・繋ぐとログが残る
代表的なポートスキャンツール
・Nmap(Zenmap)
・Hping2/Hping3
 
TCPポートスキャン(接続スキャン Connect Scan)
・指定したポートに次々に繋いでいくことによってオープンポートを確定する
・信頼性は高い
・欠点はログが残る
 
Idleスキャン
ハッカー、ゾンビ、ターゲット
この仕組みはよくできてる。すごい。
 
●サーバのフットプリンティング
サービスを行っているホストの情報を収集すること
可能であればホストのOSを特定したい
ポイントは脆弱性の程度を知ること
 
集めた情報からOSを推測
・webサーバが「IIS」なら、Windowsとわかる。
 
脆弱性情報の収集
集めた情報から攻撃手法を探す
・CVE … 確定した脆弱性のこと
JVN と JVN iPedia … 日本の脆弱性関連情報のデータベース
 
 
セキュリティの学習内容が一気に深く難しくなってきました(汗)
1回で全部を理解しようとせず、とりあえず前に進むことを意識していきます。
 
 
この日はプログラミングを一緒に学んでいる仲間とミーティング。
その中で有限なリソースの配分や自分の適正などの貴重なお話を聴かせて頂きました。
すごく良いきっかけとし、視野を広げるフェーズを終了し、C言語をマスターするための道を歩もうと思いました。
完全に覚悟が定まらないけど、覚悟が定まるまで待っているのは勿体無いので、走り出すことにしました。
一本道なので気持ちがいいです!
この場を借りて感謝申し上げたいです。ありがとうございます。
 
 
5/7(木)
C言語(ドットインストールより)
もともとは Unix という OS を開発するための言語。
OS なので、ハードウェアの性能を最大限に引き出すためにかなりハードウェアに密着した書き方をしていて、他の言語では到達できない高速処理を実現しているのが大きな特徴。
ただし、ハードウェア寄りの書き方をしているので、間違えた書き方をすると簡単に暴走してしまうので、注意すること。
様々な言語の基礎になっているので、C 言語を勉強しておくと、他の言語も分かりやすくなる。
 ハードウェアの仕組みを勉強する必要がある。
Linux に標準でついてくる gcc というプログラムを使って勉強。「GNU C Compiler」
 
printf  は文字列を出力するための命令
「\n」 は「改行」という意味
文の最後には、必ず「;」を付ける。これが文の区切り。
 
実行するときは C 言語はコンパイラ言語なので「gcc -o hello hello.c」という書き方をするが、ソースファイル(hello.c)を実行ファイル(hello)に変換してから hello を実行する、という流れ。
hello というファイルに出力しなさい、という意味での「-o(output)」
そうすると…、2 つファイルが出来る
「hello」の方を実行すると、ちゃんと「hello world!」と改行付きで表示される。
 
 
 
 
C言語(web記事「苦しんで覚えるC言語」)http://9cguide.appspot.com/s_readme.html
C言語の開発者は、Dennis Ritchie(デニス・リッチー)さん。
B言語を改良して作成した。1972年のこと。
 
●プログラムとは何か?コンピュータとの関係
プログラムとは、コンピュータを動かす最も基本的な方法。
そのプログラムを書くためにプログラミング言語がある。
ちなみに我々人間が使う言語のことは、「自然言語」という。
プログラミング言語を理解する上で大切なことは、自然言語との違いを理解することから。
1つ目の違いは、プログラミング言語自然言語に比べて文法が単純。
プログラミング言語の文法は、単語の順序が決まっているだけ。
「reflect hello」 これは 「映せ こんにちは」
なんか「開け、ごま」みたい。w
プログラミング言語で使われる品詞は、ほとんどが動詞と目的語。 
2つ目の違いは、プログラミング言語自然言語に比べて、意味が明確。
これは、明確に 命令をしなければならないということ。曖昧ではいけない。  
 
コンピュータの動作を分解すると、記憶、判断、計算の3つ。
①1つの数値を記憶する。(記憶)
②1つの数値が0であるか判断する。(判断)
③2つの数値を足し算する。(計算)
ここで言う足し算といは、0+0、0+1、1+0、1+1の4つだけ。
 
この3つを組み合わせればどんな計算もできる。
 
プログラミング 言語と自然言語の最大の違いは、その目的にある。
プログラミング 言語は「計算のための言語」ということ。
コンピュータは数値が全てであり、それ以外の概念は存在しない。
要は計算用言語。
 
コンピュータができる計算は、足し算だけ。
指示された命令の順番に従って計算を行うだけ。
 
C言語の構造
何を作るにしても構造の理解が大事。
ガンプラガンダムのプラモデル)は、パーツを組み合わせて作る。
ミニ四駆も、シャーシ、ボディ、モーター等々。
プログラムもパーツ(部品)を組み合わせて作る。
プログラミング における部品とは、関数のこと。
C言語のプログラムは、関数の集合体。
C言語の関数には基本的に順番の概念はない。好きな順番で使える。
 
●関数の作り方、関数の構造
明確な構造になっている。
【 型名 関数名(引数){ 処理 }  】
・型名とは、関数が計算結果を返す時に使う数値の種類のこと。
「int」とは、整数を意味している。
・関数の命名規則は、
①半角アルファベット、半角数字、半角_(アンダースコア)が使える。
②1文字目には数字を使うことはできない。
③予め決められた予約語は使用することはできない。
 
C言語では、予約語の他、予約済みの識別子も名前に使えない。
予約済み識別子とは、内部で使われている名前のことで、アンダースコアに大文字が続く名前も使用できない。
 
引数とは、関数に渡す数値の種類のこと。
関数は渡された数値を元に計算を行って結果を返すことができる。
渡した数値は「引数」、結果は「戻り値」。
情報がないことは「void」で表現する。
 
関数を終了させる処理は「return」文。
return文には、計算結果の数値を返す機能があるので、何もしない場合は「0」とする。
 
C言語には、基本的に関数の順番は決まっていないが、「main」という名前がついた関数から動作するという決まりがある。
つまり、main関数から実行される。
従って、もしプログラムの中に、main関数がどこにもなかったら、そのプログラムは動作しない。
逆にいうとmain関数があればC言語のプログラムは動く。
 
コンパイラは翻訳ソフト
コンピュータにとって理解できるのは2進数で書かれた命令だけ。
2進数で書かれた命令とは、機械語マシン語)のこと。
 
コンピュータ黎明期は、実際に2進数でプログラムしてた。マジで気が遠くなる。
その次に効率化のために、16進数を使うようになった。
その次が、数字を文字化したアセンブリ言語
こうして効率的にと考えられ、世界初のプログラミング 言語、「FORTRAN(フォートラン)」が登場。1957年のこと。このFORTRANから高級言語と呼ぶ。
高級言語とは、人間に分かりすく書くことができる言語のこと。
機械語アセンブリ言語は低級言語と呼ばれている。
 
C言語翻訳ソフト
高級言語は人間には理解できるけど、コンピュータには理解できない。なので、コンピュータに伝えるために翻訳することが必要。
 
翻訳方法には2種類ある。
・同時通訳(インタプリタ
柔軟な構成ができる反面、低速。
・全部一気に翻訳してから通訳(コンパイル
とにかく速い。この時に使うソフトを「コンパイラ」という。
 
コンパイラは、3段階の仕組みで動作する
①まず最初に、プリプロセッサというソフトで文字列の調整が行われる。空白や改行の結合、記号の置き換えなどを行いプログラムを解析しやすくする。
②次に、コンパイラによってコンパイルされる。この時に最適かされる。
同じC言語のプログラムでも翻訳の仕方によって動作時の速度が変わるので、より高速になるように翻訳を行っている。これを「最適化」という。
③最後に、翻訳したプログラムをリンカというソフトで結合される。
リンカで結合することを「リンク」という。
リンクすることでマシン語のデータが実行可能なファイルに変わる。
プリプロセス、コンパイル、リンクをまとめて、コンパイルということもある。
 
●書き方のルール
日本語の文章は、文字、単語、文、段落のように、文章を構成している要素に分解することができる。
C言語も同様に各要素に分解することができる。
文法的に分解した際にその最小単位は「トークン」。
トークンとは、単語のこと。
 
C言語は、「フリーフォーマット」、つまり自由書式。
プログラムの書き方の制限がほとんどないので自由に書くことができる。
C言語の書き方で明確なルールは、たった1つ。それは、「トークン同士を繋げて書いてはいけない」ということ。スペースを空けること。記号は繋げても大丈夫。カッコ、セミコロンなど。
 
その他のルール
・大文字、小文字は区別される。
・文の終わりには「;」をつける。
・全角文字は使えない。全角スペースも使えないので注意。半角のみ使える。
 
 
と、まあこんな感じです。
ブログは週に2回の更新を心がけています。
次は来週の火曜日。それまでどれだけC言語と仲良くなれるか、どんな自分が待っているのか、それを楽しみにしながら頑張ってみようと思います。
それでは、また!
 
 

学習教材①

Udemy

Vue JS入門決定版!jQueryを使わないWeb開発

中村祐太さん

 

学習教材②

Udemy

情報セキュリティEthical Hacking

阿部ひろゆきさん

 

学習教材③

ドットインストール

 

学習教材④

苦しんで覚えるC言語

http://9cguide.appspot.com/02-02.html