司馬遷回長安後的元朔五年(前124 年)至元狩四年(前119 年),是漢朝自衛青大破匈奴,收複河南地後,對匈奴大舉征伐的時期。司馬遷7 歲時,出使西域的張騫剛出漢朝邊境就被匈奴抓了去,被扣留了十多年,才趁機會逃了出來,不過他沒有立即回國,而是繼續自己的使命,去聯絡大月氏。
大月氏是西方的一個遊牧民族國家,位於現在的中亞地區。在張騫被匈奴拘留期間,大月氏被另一支遊牧民族烏孫所壓迫,從伊犁河流域遷到了更西邊的阿姆河流域。張騫到大月氏停留了一年多,回國途中又被匈奴扣留了一年多,才逃回長安,當時正是司馬遷20 歲出發遊曆的那年。
張騫前後出使13 年,雖然沒有達成聯絡大月氏、夾擊匈奴的使命,但深入了解了西域各國的國情,帶回不少珍貴的資料,對於漢武帝和匈奴爭奪西域霸權起到了相當大的幫助作用。
張騫回國是一件大事,司馬遷很可能曾經向他請教過關於西域各國的問題,他在《大宛列傳》中指出:古籍上說黃河源於昆侖,可是,張騫出使大月氏,可以說已經到了黃河的源流處以外了,卻並沒有見到什麽昆侖。
這就是司馬遷的實證精神,也是他先前展開遊曆的收獲之一。他喜歡實地考察古籍上的說法,受到限製無法親身前往的,也要從去過那裏的人口中得到一些經驗。
張騫回國以後,漢軍接連展開一連串對匈奴的主動攻擊,戰果比較豐碩的有三次:
第一次是元朔五年(前124 年),司馬遷22 歲時,由衛青統率蘇建(蘇武的父親)、李蔡(李廣的堂弟)等人的大軍,由高闕塞(今寧夏磴口縣附近)、朔方(鄂爾多斯高原)出發,出塞六七百裏,俘虜匈奴一萬五千多人,牛羊數十萬頭。
第二次是元狩二年(前121 年),司馬遷25 歲時,漢武帝遣霍去病為將兩次統兵出征,斬匈奴共約4 萬人。匈奴單於率眾投降,漢朝得到了黃河以西今甘肅境內的大片土地,設武威、張掖、酒泉、敦煌四郡。