what server they use

nc send string over network.

vagrant@vagrant-ubuntu-trusty-64:~$ printf ‘HEAD / HTTP/1.1\r\nHost: www.google.co.jp\r\n\r\n’ | nc www.google.co.jp 80

HTTP/1.1 200 OK
Date: Sat, 10 Dec 2016 13:39:24 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
P3P: CP=”This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.”
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=91=vO7aa7YjWxJPGDWffZj–p855KgcdJdpvH9dCUAVgWBX7f8JZdeweK_wY3msj09u8Osyz2tK4H4X3cjnZX1QK45cCxRB910amTq7Kmllk6TS3iH9HMIVw73LAaOW4Swq; expires=Sun, 11-Jun-2017 13:39:24 GMT; path=/; domain=.google.co.jp; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding

vagrant@vagrant-ubuntu-trusty-64:~$ printf ‘HEAD / HTTP/1.1\r\nHost: www.amazon.com\r\n\r\n’ | nc www.amazon.com 80
HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Dec 2016 13:44:34 GMT
Server: Server
Location: https://www.amazon.com/
Content-Type: text/html; charset=iso-8859-1

vagrant@vagrant-ubuntu-trusty-64:~$ man nc

connecting by nc command.

vagrant@vagrant-ubuntu-trusty-64:~$ nc localhost 3456
vagrant@vagrant-ubuntu-trusty-64:~$ nc -l 3456

getting started Ubuntu

After install vitrualbox and vagrant,

vagrant init ubuntu/trusty64
vagrant up
vagrant ssh
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install netcat-openbsd tcpdump traceroute mtr

command

vagrant@vagrant-ubuntu-trusty-64:~$ ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:6c:cb:39 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe6c:cb39/64 scope link
       valid_lft forever preferred_lft forever

vagrant@vagrant-ubuntu-trusty-64:~$ ip route show
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15

vagrant@vagrant-ubuntu-trusty-64:~$ ping -c3 8.8.8.8

vagrant@vagrant-ubuntu-trusty-64:~$ host -t aaaa google.com
google.com has IPv6 address 2404:6800:4004:817::200e

vagrant@vagrant-ubuntu-trusty-64:~$ printf 'HEAD / HTTP/1.1\r\nHost: www.udacity.com \r\n\r\n' \ |nc www.udacit.com 80
HTTP/1.1 200 OK
Content-Length: 0
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
Date: Sat, 10 Dec 2016 13:16:14 GMT

vagrant@vagrant-ubuntu-trusty-64:~$ sudo tcpdump -n -c5 -i eth0

vagrant@vagrant-ubuntu-trusty-64:~$ mtr www.udacity.com

ping request do not need server, just confirm computer system existing. Ping is simpler than HTTP, http is not ping.

アプリケーション起動時にイベント送信

func application(application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // ...
    let mobileAnalytics =
    AWSMobileAnalytics(forAppId: "ApplicationID")
    let eventClient = mobileAnalytics.eventClient
    let event = eventClient.createEventWithEventType("ApplicationStart")
    eventClient.recordEvent(event)
    eventClient.submitEvent()
    return true
}

プッシュ通知

func push(){
    let publishInput = AWSSNSPublishInput()
    publishInput.targetArn = "arn:aws:sns:us-east-1:xxxxxxxxxx:share-users"
    publishInput.message = "new picture is posted"
    AWSSNS.defaultSNS().publish(publishInput)
}

AWSプッシュ通知

エンドポイントANRを取得します。

import AWSSNS

// ...

func application(application: UIApplication,
                 didFinishLauchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // ...
    let settings =
    UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert],
                               categories: nil)
    application.registerUserNotificationSetting(settings)
    application.registerForRemoteNotifications()
    return true
}

    func application(application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData){
        let deviceTokenString = "¥(deviceToken)"
        .stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"<>"))
        .stringByReplacingOccurrencesOfString(" ", withString: "")
        
        let credentialsProvider =
        AWSCognitoCredentialsProvider(regionType: .USEast1,
                                      identityPoolId: "us-east-1:")
        
        let serviceConfiguration =
        AWSServiceConfiguration(region: .USEast1,
                                credentialsProvider: credentialProvider)
        AWSServiceManager.defaultServiceManager().defaultServiceConfiguration =
        serviceConfiguration
        
        let createPlatformEndpointInput = AWSSNSCreatePlatformEndpointInput()
        createPlatformEndpointInput.platformApplicationArn =
        "arn:aws:sns:us-east-1::app/APNS_SANDBOX/Share"
        createPlatformEndpointInput.token = deviceTokenString
        AWSSNS.defaultSNS().createPlatformEndpoint(createPlatformEndpointInput)
        .continueWithSuccessBlock({(task) -> AnyObject! in
            guard let createEndpointResponse =
            task.result as? AWSSNSCreateEndpointResponse else{
                return task
            }
            let subscribeInput = AWSSNSSubscribeInput()
            subscribeInput.protocols = "application"
            subscriptInput.topicArn =
            "arn:aws:sns:us-east-1::share-users"
            subscribeInput.endpoint = createEndpointResponse.endpointArn
            return AWSSNS.defaultSNS.subscribe(subscribeInput)
        })
    }

TCP/IPセキュリティ実験


16年前のTCPやIPの書籍を一読。著者は日立製作所システム開発研究所の寺田真敏さん。日立の方が書く本を読んだのは、それこそ10年ぶりくらい。

P90にポートスキャン実験用のプログラムがcで掲載されていたが、もっと欲しかったなと思いながらも、なかなか興味深かったです。

トロイの木馬型ウィルス

Picture.EXE:キャッシュされたユーザー名およびパスワードを含んだ内容のファイルを調べ、電子メールを利用して送信
K2PS.EXE:ダイヤルアップネットワークのパスワードを電子メールを利用して送信
Y2Kcount.exe:WSOCK32.DLLの置き換え、ログイン時のパスワード横取り
BackDoor-G亜種:インストールすると遠隔制御することが可能に
W95.Baylonia:ウィルスプログラムの自動送信および自動アップデート

APR偽装

データリンク層の1つであるイーサネットでは、送信元と送信先のアドレスの指定にMACアドレスを利用しています。インターネット層におけるIPアドレスとMACアドレスの対応付けを担っているのがAPR(address resolution protocol)です。

コンピュータはAPRテーブルに一定期間、IPとMACの組をキャッシュとして保持しています。このキャッシュは、偽造したARPパケットを送信することで書き換え可能です。これで、通信を妨害することもあり得ます。

対策としては、IPSecのAHを利用する方法や、アプリケーションならびに通信路の暗号化と認証強化を行う方法があります。

ネットワークエンジニアの教科書

シスコシステムズ合同会社さんのネットワークエンジニアの教科書
を読みました。

章立ては以下の通り。
Chapter1 ネットワークエンジニアの仕事
Chapter2 ネットワークの基礎知識
Chapter3 ルーティングプロトコル
Chapter4 スイッチ・ルータのアーキテクチャ
Chapter5 セキュリティ
Chapter6 無線ネットワーク
Chapter7 データセンター
Chapter8 ユニファイド・コミュニケーション
Chapter9 トラブルシューティング・ガイド
Chapter10 トラブルシューティングの代表的なツール
Chapter11 ネットワーク機器のハードウェアと保守
Chapter12 トラブルの起きにくいネットワークの構築と運用
Chapter13 今後のネットワークエンジニアに求められるスキル

シスコの商品紹介、説明がかなり入っています。
技術トレンドとしては、SDN(Software Defined Network)および、NFV(Network Functions Virtualization)が次世代のネットワーク技術の潮流と述べています。SDNはコントローラーを独立させること、NFVは仮想化技術。要は全体設計ですかね。

無線LANの説明は読み応えありました。周波数が低い電波の方が屈折率が高く、電波が回り込みやすいそうです。セキュリティは、Open System, Shared key認証、ネットワーク認証が主たるものとのこと。ここはもっと勉強したいです。

ちなみに、Ciscoルーター機能を使えば、社内でtwitter, Dropbox, YoutubeのIPアドレスを探し出す事ができるそうです。お〜怖。