こんにちは、いつもありがとうございます。
家の作るカフェラテを気に入ってしまった安藤です。
まだまだ大変な状況は続いておりますが、僕の肌感ですが、徐々にこの状況に適応してきている方々が増えてきているように感じます。
そう感じたのはここ数日。
もっと前から色々考えていたのだろうけど、改善改革に向けたアウトプットをする方が増えてきたように感じます。
逞しいと思い、すごいなと思います。なんか嬉しい感じもします。
感性、知性、行動力が活性化されているように思います。
自分ももっと頑張ろう!とエネルギーをもらっています。
前を向いて頑張る人は格好良いです。
周りの困っている人に寄り添って一緒に前を向こうとしている人はさらに格好良いです。
さて、今回の学習ログですが、
今までは主に、Vue.jsとセキュリティを学んできましたが、私の周りの素晴らしい方々からの助言を頂き、改めてC言語を学ぶことにしました。
なぜか分かりませんがすごくこわいです。なので、これをやりきる覚悟がまだ完全に定まりません。不思議な感覚です。
今までは視野を広げるフェーズでしたが、これからは深く深く掘っていくフェーズにすることを決めました。
スコップで深く掘ろうとすると、穴の直径は次第に広がっていくので、周辺の情報も拾いながら進めていこうと思います。
人がやらないこと、できないことにチャレンジして何か面白いことを5年以内に実現します。
一応ここで宣言しておこうと思います。まだ何も見えていませんが。笑
5/5(火)
◎Vue.js
APIを使ったqiitaの記事検索について
◎セキュリティについて
●公開情報の収集
ターゲットが自分から公開している情報
・ネットワーク情報
・ドメイン情報
・DNS情報
・会社情報
・求人情報
<ホームページ>
・URL
・ドメイン→IPアドレス
・所在地
・役員名
・取引先
<SNS>
・フォロワー
・レビュー
・地図
得られた情報からさらに情報を収集
・電話番号で検索
・住所で検索
・「@ドメイン名」でメールを検索
媒体から収集
・TVコマーシャル
・折り込みチラシ
・WEBニュース
●ネットワーク情報の収集
・ドメイン名
ここから手に入る情報は、
・IPアドレス
・使用しているネットワーク範囲(または上位プロバイダ)
・DNS情報
・担当者情報(名前、所属、電話番号)
<ドメイン情報>
「.jp」ドメインの場合 → JPRS のWhoisサイト 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を推測
集めた情報から攻撃手法を探す
セキュリティの学習内容が一気に深く難しくなってきました(汗)
1回で全部を理解しようとせず、とりあえず前に進むことを意識していきます。
この日はプログラミングを一緒に学んでいる仲間とミーティング。
その中で有限なリソースの配分や自分の適正などの貴重なお話を聴かせて頂きました。
すごく良いきっかけとし、視野を広げるフェーズを終了し、
C言語をマスターするための道を歩もうと思いました。
完全に覚悟が定まらないけど、覚悟が定まるまで待っているのは勿体無いので、走り出すことにしました。
一本道なので気持ちがいいです!
この場を借りて感謝申し上げたいです。ありがとうございます。
5/7(木)
もともとは
Unix という OS を開発するための言語。
OS なので、ハードウェアの性能を最大限に引き出すためにかなりハードウェアに密着した書き方をしていて、他の言語では到達できない高速処理を実現しているのが大きな特徴。
ただし、ハードウェア寄りの書き方をしているので、間違えた書き方をすると簡単に暴走してしまうので、注意すること。
様々な言語の基礎になっているので、C 言語を勉強しておくと、他の言語も分かりやすくなる。
ハードウェアの仕組みを勉強する必要がある。
printf は文字列を出力するための命令
「\n」 は「改行」という意味
文の最後には、必ず「;」を付ける。これが文の区切り。
実行するときは C 言語は
コンパイラ言語なので「
gcc -o hello hello.c」という書き方をするが、ソースファイル(hello.c)を実行ファイル(hello)に変換してから hello を実行する、という流れ。
hello というファイルに出力しなさい、という意味での「-o(output)」
そうすると…、2 つファイルが出来る
B言語を改良して作成した。1972年のこと。
●プログラムとは何か?コンピュータとの関係
プログラムとは、コンピュータを動かす最も基本的な方法。
ちなみに我々人間が使う言語のことは、「
自然言語」という。
「reflect hello」 これは 「映せ こんにちは」
なんか「開け、ごま」みたい。w
これは、明確に 命令をしなければならないということ。曖昧ではいけない。
コンピュータの動作を分解すると、記憶、判断、計算の3つ。
①1つの数値を記憶する。(記憶)
②1つの数値が0であるか判断する。(判断)
③2つの数値を足し算する。(計算)
ここで言う足し算といは、0+0、0+1、1+0、1+1の4つだけ。
この3つを組み合わせればどんな計算もできる。
プログラミング 言語と
自然言語の最大の違いは、その目的にある。
プログラミング 言語は「計算のための言語」ということ。
コンピュータは数値が全てであり、それ以外の概念は存在しない。
要は計算用言語。
コンピュータができる計算は、足し算だけ。
指示された命令の順番に従って計算を行うだけ。
何を作るにしても構造の理解が大事。
プログラムもパーツ(部品)を組み合わせて作る。
プログラミング における部品とは、関数のこと。
C言語の関数には基本的に順番の概念はない。好きな順番で使える。
●関数の作り方、関数の構造
明確な構造になっている。
【 型名 関数名(引数){ 処理 } 】
・型名とは、関数が計算結果を返す時に使う数値の種類のこと。
「int」とは、整数を意味している。
①半角アルファベット、半角数字、半角_(アンダースコア)が使える。
②1文字目には数字を使うことはできない。
予約済み識別子とは、内部で使われている名前のことで、アンダースコアに大文字が続く名前も使用できない。
引数とは、関数に渡す数値の種類のこと。
関数は渡された数値を元に計算を行って結果を返すことができる。
渡した数値は「引数」、結果は「戻り値」。
情報がないことは「void」で表現する。
関数を終了させる処理は「return」文。
return文には、計算結果の数値を返す機能があるので、何もしない場合は「0」とする。
C言語には、基本的に関数の順番は決まっていないが、「main」という名前がついた関数から動作するという決まりがある。
つまり、main関数から実行される。
従って、もしプログラムの中に、main関数がどこにもなかったら、そのプログラムは動作しない。
逆にいうとmain関数があれば
C言語のプログラムは動く。
コンピュータにとって理解できるのは2進数で書かれた命令だけ。
コンピュータ黎明期は、実際に2進数でプログラムしてた。マジで気が遠くなる。
その次に効率化のために、16進数を使うようになった。
高級言語とは、人間に分かりすく書くことができる言語のこと。
高級言語は人間には理解できるけど、コンピュータには理解できない。なので、コンピュータに伝えるために翻訳することが必要。
翻訳方法には2種類ある。
柔軟な構成ができる反面、低速。
とにかく速い。この時に使うソフトを「
コンパイラ」という。
①まず最初に、
プリプロセッサというソフトで文字列の調整が行われる。空白や改行の結合、記号の置き換えなどを行いプログラムを解析しやすくする。
同じ
C言語のプログラムでも翻訳の仕方によって動作時の速度が変わるので、より高速になるように翻訳を行っている。これを「最適化」という。
③最後に、翻訳したプログラムをリンカというソフトで結合される。
リンカで結合することを「リンク」という。
リンクすることで
マシン語のデータが実行可能なファイルに変わる。
●書き方のルール
日本語の文章は、文字、単語、文、段落のように、文章を構成している要素に分解することができる。
C言語は、「フリーフォーマット」、つまり自由書式。
プログラムの書き方の制限がほとんどないので自由に書くことができる。
C言語の書き方で明確なルールは、たった1つ。それは、「
トークン同士を繋げて書いてはいけない」ということ。スペースを空けること。記号は繋げても大丈夫。カッコ、
セミコロンなど。
その他のルール
・大文字、小文字は区別される。
・文の終わりには「;」をつける。
・全角文字は使えない。全角スペースも使えないので注意。半角のみ使える。
と、まあこんな感じです。
ブログは週に2回の更新を心がけています。
次は来週の火曜日。それまでどれだけ
C言語と仲良くなれるか、どんな自分が待っているのか、それを楽しみにしながら頑張ってみようと思います。
それでは、また!