顯示具有 C語言教學 標籤的文章。 顯示所有文章
顯示具有 C語言教學 標籤的文章。 顯示所有文章

2017年4月17日 星期一

  •         抓取 wlan0 mac

ifconfig wlan0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'


ifconfig ath0 | grep HWaddr | sed -n 's/://gp' | awk '{print $5}'

  • issue : 使用倒數計時於 label ,GUI 無法即使顯示

 resolve : 使用 application.DoEVENTS();

2014年5月8日 星期四

利用 cmd 執行 program

public string RunProgram(string prog, string param)
{
            string cmdoutput = "";
            //實例一個Process類,啟動一個獨立進程  
            Process p = new Process(); //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,  
            //包括了一些屬性和方法,下面我們用到了他的幾個屬性:  
            p.StartInfo.FileName = prog; //設定程序名  
            p.StartInfo.Arguments = param; //設定程式執行參數  
            p.StartInfo.UseShellExecute = false; //關閉Shell的使用
            p.StartInfo.RedirectStandardInput = true; //重定向標準輸入
            p.StartInfo.RedirectStandardOutput = true; //重定向標準輸出  
            p.StartInfo.RedirectStandardError = true; //重定向錯誤輸出  
            p.StartInfo.CreateNoWindow = true; //設置不顯示窗口  
            p.Start(); //啟動 
            cmdoutput = p.StandardOutput.ReadToEnd(); //從輸出流取得命令執行結果                     
            return cmdoutput;
 }

////////////////////////////////////////////////////////////////////

string cmd = "";
   string devID = "USB\\VID_" + m_VID2 + "&PID_" + m_PID2;
   
            //cmd = "DeviceID.bat";
            cmd = RunProgram("devcon.exe", "remove BTH\\MS_BTHBRB");
            cmd += "\n";
            cmd += RunProgram("devcon.exe", "remove BTH\\MS_BTHPAN");
            cmd += "\n";
            cmd += RunProgram("devcon.exe", "remove BTH\\MS_RFCOMM");
            cmd += "\n";
            cmd += RunProgram("devcon.exe", "remove " + devID);

2014年1月12日 星期日

從 PID/VID 換算出 GUID 值

public string GetGUID(string VendorID, string ProductID)
        {
            string m_GUID = "";
            ManagementObjectCollection USBControllerDeviceCollection = new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice").Get();
            if (USBControllerDeviceCollection != null)
            {
                foreach (ManagementObject USBControllerDevice in USBControllerDeviceCollection)
                {
                  String Dependent = (USBControllerDevice["Dependent"] as String).Split(new Char[] { '=' })[1];
                    if (Dependent.IndexOf(VendorID) >= 0 && Dependent.IndexOf(ProductID) >= 0)
                    {
                        ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE DeviceID=" + Dependent).Get();
                        if (PnPEntityCollection != null)
                        {
                            foreach (ManagementObject Entity in PnPEntityCollection)
                            {
                                Guid theClassGuid = new Guid(Entity["ClassGuid"] as String);    // ????GUID 
                                m_GUID = theClassGuid.ToString();
                                return m_GUID;
                            }
                          }
                    }
                }
            }

            return m_GUID;
}

20120816 利用 thread 來做 timeout 功能

DateTime startTime = DateTime.Now;
   m_Samba_flag = false;
   Thread StartSamba_thread = new Thread(new ThreadStart(StartSamba_process));
   StartSamba_thread.Start();
   while (!m_Samba_flag && (DateTime.Now < startTime)) ;
   StartSamba_thread.Abort();


   if (DateTime.Now > startTime) return false;

public void StartSamba_process()
{
            string cmd = "SambaTest.bat";
            cmd =GlobalStatic.RunCmd_Hide(cmd);
            MainForm.Instance.ShowTest_Info(1, cmd, Color.Gray);
            m_Samba_flag = true;
}

WinExec 模擬cmd 開啟執行命令

//#define SW_HIDE 0 //隐藏窗口,活动状态给令一个窗口
//#define SW_SHOWNORMAL 1 //用原来的大小和位置显示一个窗口,同时令其进入活动状态
//#define SW_NORMAL 1
//#define SW_SHOWMINIMIZED 2
//#define SW_SHOWMAXIMIZED 3
//#define SW_MAXIMIZE 3
//#define SW_SHOWNOACTIVATE 4 //
用最近的大小和位置显示一个窗口,同时不改变活动窗口
//#define SW_SHOW 5 //用当前的大小和位置显示一个窗口,同时令其进入活动状态
//#define SW_MINIMIZE 6 //最小化窗口,活动状态给令一个窗口
//#define SW_SHOWMINNOACTIVE 7 //最小化一个窗口,同时不改变活动窗口
//#define SW_SHOWNA 8 //用当前的大小和位置显示一个窗口,不改变活动窗口
//#define SW_RESTORE 9 //与 SW_SHOWNORMAL 1 相同
//#define SW_SHOWDEFAULT 10
//#define SW_FORCEMINIMIZE 11
//#define SW_MAX 
11

[
DllImport("kernel32.dll")]
public static extern 
int WinExec(string exeNameint operType);

WinExec(@"C:\WINDOWS\system32\cmd.exe",5);
-----------------------------------------------------------------------------------------
[DllImport("user32.dll", SetLastError = true ,EntryPoint = "PostMessageA")]
        public static extern bool PostMessage1(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)] uint Msg, int wParam, int lParam);       
        [DllImport("user32.dll", SetLastError = true , EntryPoint = "PostMessageA")]
        public static extern bool PostMessage1(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)] uint Msg, IntPtr wParam, IntPtr lParam);
         public void msg_sendkey(IntPtr cmdHandle, string msg)
        {
                uint WM_KEYDOWN = 0x0100;
                uint WM_KEYUP = 0x0101;
                uint WM_CHAR = 0x0102;
                uint wparam = 0 << 29 | 0;
                int i = 0;
               
                for (i = 0; i < msg.Length; i++)
                {
                    Win32API.PostMessage1(cmdHandle, WM_CHAR, msg[i], 0);
                }
                Win32API.PostMessage1(cmdHandle, WM_KEYDOWN, (IntPtr)Keys.Enter, (IntPtr)wparam);
           
      }



Devcon 控制 device

裝置 USB device
devcon_32 restart USBSTOR\\*
devcon_64 restart USBSTOR\\*

卸載 USB device
devcon remove usbstor*
devcon /r disable *DVD-ROM*

安裝 USB device
devcon enable *168c*
devcon rescan

列出某個classdevice(這裡用net class)
devcon listclass net

透過Instance ID列出某個devicestatus
devcon status "@PCI\VEN_8086&DEV_1130&SUBSYS_00000000&REV_02\3&29E81982&0&00"

devcon find USB*

关闭类设备:
devcon.exe disable USB\Class_08
禁用U盘,即删除U盘,不管你有NU盘统统一起删除
devcon.exe disable USB\Class_06
禁用数码相机,包括数码相机附带的可移动磁盘
devcon.exe disable USB\Class_03
      禁用USB鼠标&键盘 

RegisterKey

public string ReadRegisterKey()
{
            string sPW = "";
            RegistryKey Reg = Registry.CurrentUser.OpenSubKey("Software", true);
            string[] ssNames = Reg.GetSubKeyNames();
            sPW = System.Convert.ToString(Registry.GetValue("HKEY_CURRENT_USER\\Software\\foxlink", "admin", ""));
            if (sPW == "") sPW = "admin";
            return sPW.Trim();

}


 public bool WriteRegisterKey(string sPW)
        {
            RegistryKey Reg = Registry.CurrentUser.OpenSubKey("Software", true);
            Registry.SetValue("HKEY_CURRENT_USER\\Software\\foxlink", "admin", sPW, RegistryValueKind.String);
            return true;
        }

2008年5月19日 星期一

計數counter - 統計 - 排序 - 分析

在學網路工程時,常常要做分析,但首先要有計數的技巧,也就是記錄有多少的SA進入 , 或者多少DA 等等資料, 當然會做一個表格 , 就為統計的功能 , 而統計在C++中,我們通常都是用陣列方式儲存,但會有空間和效能降低缺點,於是乎要學習 Link-list 指功能,
首先要建立結構表,然後要想像建立一個Table資料表:

mac[6] , ipsrc ,counter ,*next


typedef struct ip_head{
u_char mac[6];
struct in_addr ipsrc;
int counter;
struct ip_head *next;
} NODE1;


NODE1 *pnew1;
pnew1=(NODE1 *)malloc(sizeof(NODE1));

我們要有Hash func.的分類概念,將IP分配到不同的位址,當碰到collision 時,則利用Link-list改善. 當有新的資料進來時,要用 over-head 的前插鍊結,此時要有一些資料結構的觀念:


void insert_head(struct in_addr ip_src,int src_num){

NODE1 *pnew1;

pnew1=(NODE1 *)malloc(sizeof(NODE1));

pnew1->ipsrc=ip_src;

pnew1->counter=1;

pnew1->next=pnew_head[src_num];

pnew_head[src_num]=pnew1; return;

}


等到這些作業完畢後,就要做排序工作,就像從小排到大,如此才能去做之後的分析

,而排序要建立新的一個鍊結串列,要將舊的Table 一一比較然後往前插,或往後插入,其中會遇到一些資料結構的問題.在此提出:



此鍊結指標要有四個:

pnew_head : 永遠指著頭 Head

pnew : 暫存資料的buffer 指標

pnew_tail1 : 目前這結指標所指的地方

pnew_tail2: 指著 pnew_tail1 的下一個鍊結串列

-----------------------------

20080504 tcap9.c modify sniffex.c

Iperf3.1.3 使用方法

20190417: 使用 Iperf3.1.3 //-c: TCP client //-w:測試檔案大小 //-i:inteval //-t:times //--omit 代表濾掉前兩個測試值,這樣就可以得到比較好的平均速率 //-R:Downlink ; 不設定 default...